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

标签 c++ object pointers heap-memory stack-memory

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

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

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

最佳答案

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

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

关于c++ - c++中以下两种方法有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466812/

相关文章:

c++ - 为什么使用指针 vector 被认为是不好的?

c++ - 如果数组很大,使用指针作为 C++ 类成员是否是一种更有效的方法?

c++ - 不知道这个指针可能指向什么并且无法解释结果

c++ - 使用 Visual Studio 调试器进行调试时使用标准输入作为输入

c++ - 函数多次不起作用?

javascript - 是否可以将变量存储在数组或对象中并引用它以获取变量的值而不是变量的字符串名称?

python - 在 C++ 中使用 Python 对象

java - 如何获取字符串数组并将它们进一步分成对象?

c++ - 对于遗传算法中的非排序种群,轮盘赌选择应该如何组织?

c++ - 在C++书籍中,array bound必须是常量表达式,但为什么下面的代码有效?