C++ - 初始化中 class 的指针和 class 的对象之间的区别
C++ - Difference between pointer of a class and object of class in initialization
在 C++ 中
假设我有
class Sample{
public:
void someFunction();
};
在main()中做
有什么区别吗
Sample obj;
obj.someFunction();
AND
Sample *obj = new Sample();
obj->someFunction();
这只是语法问题还是有 performance/implementation 区别?什么时候应该用一个代替另一个?
这是简单的事情 - 与堆和堆栈有关
Sample obj;
obj.someFunction();
obj 在堆栈上
和
Sample *obj = new Sample();
obj->someFunction();
在堆上。
这需要删除。它也存在于范围之外。
性能差不多
Sample obj;
obj.someFunction();
在这种情况下,它是静态分配。
obj 的内存分配在 main() 函数的堆栈区域中。
Sample *obj = new Sample();
obj->someFunction();
在另一种情况下,您使用 new 运算符动态创建了对象。
它分配在堆内存中。
使用后,您应该使用删除操作符释放它。
delete obj;
所以除此之外没有其他区别。在动态分配的情况下,我们必须根据需要分配和释放内存。
但在静态分配中,分配发生在声明时,释放发生在变量作用域结束时。
在 C++ 中 假设我有
class Sample{
public:
void someFunction();
};
在main()中做
有什么区别吗Sample obj;
obj.someFunction();
AND
Sample *obj = new Sample();
obj->someFunction();
这只是语法问题还是有 performance/implementation 区别?什么时候应该用一个代替另一个?
这是简单的事情 - 与堆和堆栈有关
Sample obj;
obj.someFunction();
obj 在堆栈上
和
Sample *obj = new Sample();
obj->someFunction();
在堆上。
这需要删除。它也存在于范围之外。
性能差不多
Sample obj;
obj.someFunction();
在这种情况下,它是静态分配。 obj 的内存分配在 main() 函数的堆栈区域中。
Sample *obj = new Sample();
obj->someFunction();
在另一种情况下,您使用 new 运算符动态创建了对象。 它分配在堆内存中。 使用后,您应该使用删除操作符释放它。
delete obj;
所以除此之外没有其他区别。在动态分配的情况下,我们必须根据需要分配和释放内存。 但在静态分配中,分配发生在声明时,释放发生在变量作用域结束时。