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;

所以除此之外没有其他区别。在动态分配的情况下,我们必须根据需要分配和释放内存。 但在静态分配中,分配发生在声明时,释放发生在变量作用域结束时。