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 []).
在第二种情况下,对象在其封闭范围的末尾自动释放(方法,方法中的嵌套块或类)
您使用哪一个主要取决于对象的生命周期(如果它应该比创建它的方法更长).
第一个表单在堆上创建对象,而第二个表单在堆栈上创建它.
当函数完成运行时,第二个将被销毁.第一个将保持活着,直到被特别删除.
如果您只想使用当前范围中的对象,则第二种形式最好.你不必担心摆脱它,因为它会为你完成.另请注意,如果在堆栈上创建了类,则某些库不起作用.
如果对象应该比该函数寿命更长,则新表单是更好的选择.