使用 C++ 时,我们经常用指针表示对象,比如像下面这样:
Object *myObject = new Object;
而不是:
Object myObject;
或者在调用成员函数的时候,都会这样:
myObject->testFunc();
而不是:
myObject.testFunc();
对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。
下面从两个方面来解释:
-
什么时候该使用 new?
-
什么时候该使用指针?
对象生命周期
上面两种创建对象的语句有什么不同呢?
对于 Object myObject;该对象被创建在栈上,它的特点就是脱离作用域后会自动销毁。而对于 new Object(),它会在堆上动态创建一个对象,它的特点就是即使脱离作用域,该对象也会一直存在,除非你手动释放(delete)它,否则就会出现内存泄漏。
什么时候该使用 new?
-
你需要延长对象生命周期。 意思是说你想一直使用某个地址位置的变量,而不是它的副本,对于后者,我们更应该使用
Object myObject;的语法。 -
你需要很多内存。 大家都知道,栈空间比堆空间小的多。
当你确实要用动态内存分配的话,应该用智能指针或者其它的 RAII 技术来管理这部分资源。
什么时候该使用指针?
除了动态分配内存之外,原始指针还有其它

本文探讨了C++中何时使用new动态分配内存以及何时使用指针。对象在栈上创建时,脱离作用域会自动销毁,而堆上创建的对象需要手动删除以避免内存泄漏。使用new适用于需要延长对象生命周期或大量内存的情况。指针常用于引用语义、多态和表示可选对象。现代C++推荐使用智能指针进行资源管理,以减少内存泄漏风险。同时,指针也有助于兼容C库和解耦编译单元。
最低0.47元/天 解锁文章
996

被折叠的 条评论
为什么被折叠?



