创建C++对象

neu*_*cer 14 c++ g++ class object

我注意到有两种方法可以创建C++对象:

BTree *btree = new BTree;
Run Code Online (Sandbox Code Playgroud)

BTree btree;
Run Code Online (Sandbox Code Playgroud)

据我所知,唯一的区别在于如何访问类对象(.与 - >运算符),并且当使用第一种方式时,私有整数被初始化为0.

哪种方式更好,有什么区别?

你怎么知道何时使用其中一个?

cka*_*ras 32

两个区别:

  • 他们在内存的不同部分创建对象(堆与堆栈)

  • 对象生存期是不同的:在第一种情况下,代码显式地管理内存分配,它还必须显式地管理释放(使用delete/delete []).

    在第二种情况下,对象在其封闭范围的末尾自动释放(方法,方法中的嵌套块或类)

您使用哪一个主要取决于对象的生命周期(如果它应该比创建它的方法更长).


Win*_*ert 5

第一个表单在堆上创建对象,而第二个表单在堆栈上创建它.

当函数完成运行时,第二个将被销毁.第一个将保持活着,直到被特别删除.

如果您只想使用当前范围中的对象,则第二种形式最好.你不必担心摆脱它,因为它会为你完成.另请注意,如果在堆栈上创建了类,则某些库不起作用.

如果对象应该比该函数寿命更长,则新表单是更好的选择.


Rev*_*316 0

嗯,它们被存储在完全不同的内存区域中。

这是一篇很好的读物。 堆和栈