在C ++中 假设我有
class Sample{
public:
void someFunction();
};
在main()中,执行
之间有什么区别Sample obj;
obj.someFunction();
AND
Sample *obj = new Sample();
obj->someFunction();
只是语法问题还是存在性能/实现差异?应该何时使用另一个?
答案 0 :(得分:3)
这很简单 - 与堆和堆栈有关
Sample obj;
obj.someFunction();
obj在堆栈上
和
Sample *obj = new Sample();
obj->someFunction();
在堆上。
这需要删除。它也存在于范围之外。
表现大致相同
答案 1 :(得分:3)
Sample obj;
obj.someFunction();
在这种情况下,它是静态分配。 obj的内存分配在main()函数的堆栈区域中。
Sample *obj = new Sample();
obj->someFunction();
在另一种情况下,您使用new运算符动态创建对象。 它分配在堆内存中。 使用后,您应该使用删除操作符释放它。
delete obj;
除此之外没有其他区别。在动态分配的情况下,我们必须根据需要分配和释放内存。 但是在静态分配中,它会在声明时发生,而在变量的作用域结束时会发生释放。