C ++ - 类的指针和初始化类中的对象之间的区别

时间:2015-01-26 05:25:18

标签: c++ class

在C ++中 假设我有

class Sample{
 public:
 void someFunction();
};

在main()中,执行

之间有什么区别
Sample obj;
obj.someFunction();

AND

Sample *obj = new Sample();
obj->someFunction();

只是语法问题还是存在性能/实现差异?应该何时使用另一个?

2 个答案:

答案 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;

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