以下两种方法在 c++ 中有什么区别

What is the difference between below two methods in c++

本文关键字:什么 区别 c++ 两种 方法      更新时间:2023-10-16
MyClass* po = new MyClass();    
po->DoSomething();

MyClass po;    
MyClass* pp = &po;    
pp->DoSomething();        

您能否解释一下,包括堆栈和堆中会发生什么。

第一种情况是使用堆中的动态内存分配创建 MyClass 类型的实例。 当您离开范围时,指向 po 的对象仍将存在于堆中,如果不考虑,则会留下内存泄漏。

第二个是在堆栈上实例化 MyClass 的实例。 然后创建一个指针,以键入指向堆栈上的对象的 MyClass。 当你离开范围时,po 将被破坏,pp 指向的对象将无效。

区别在于分配内存的方式。

  1. MyClass* po = new MyClass();从堆分配内存并返回指针。您可以使用给定的指针访问内存。
  2. MyClass po;分配堆栈上的内存。离开作用域后(当函数返回时),即使您有指针,也无法访问此内存。