用c ++创建对象

Dri*_*zzt 3 c++ pointers object instantiation instance

我只是在一条简单的线上浪费了数小时,导致数据丢失 我有AnotherClass持有MyClass实例的向量.这个AnotherClass通过以下方式实例化MyClass的对象:

 AnotherClass::AnotherClass(){            
      MyClass myObject(...);
      myVector.push_back(&myObject);
 }
Run Code Online (Sandbox Code Playgroud)

之后,myObject的地址被推送到一个向量(与MyClass的其他实例一起),就像在代码中编写的一样.当我开始使用AnotherClass的实例时,我注意到MyClass的值丢失了(完全随机).当我将代码更改为:

 AnotherClass::AnotherClass(){            
      MyClass* myObject = new MyClass(...);
      myVector.push_back(myObject);
 }
Run Code Online (Sandbox Code Playgroud)

我没有数据丢失.

有人可以这么好解释为什么第二种创建对象的方法不会导致数据丢失吗?(没有引用我的1.000页的书籍)

ben*_*ous 9

简单.第一个版本在堆栈上创建一个局部变量,当它超出范围时会自动销毁(在函数末尾)

您的向量只包含指向对象所在位置的指针.

第二个版本在堆上创建一个对象,它将一直存在,直到你最终删除它.