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