MyClass* po = new MyClass();
po->DoSomething();
和
MyClass po;
MyClass* pp = &po;
pp->DoSomething();
你能解释一下这包括堆栈和堆中会发生什么。
答案 0 :(得分:1)
第一种情况是使用堆中的动态内存分配创建MyClass类型的实例。当您离开作用域时,指向po的对象仍将存在于堆中并且如果不考虑则会留下内存泄漏。
第二个是在堆栈上实例化MyClass的实例。然后创建一个指向类型MyClass的指针,指向堆栈上的对象。当你离开范围时,po将被破坏,pp指向的对象将无效。
答案 1 :(得分:0)
区别在于你分配内存的方式。
MyClass* po = new MyClass();
从堆中分配内存并返回指针。您可以使用给定的指针访问内存。MyClass po;
在堆栈上分配内存。离开示波器后(当函数返回时),即使有指针,也无法访问此内存。