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

时间:2014-12-14 06:06:30

标签: c++ pointers object stack heap

MyClass* po = new MyClass();    
po->DoSomething();

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

你能解释一下这包括堆栈和堆中会发生什么。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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