在c中创建对象
发布时间:2020-12-16 10:25:23 所属栏目:百科 来源:网络整理
导读:我只是在一条简单的线上浪费了数小时,导致数据丢失我有AnotherClass持有MyClass实例的向量.这个AnotherClass通过以下方式实例化MyClass的对象: AnotherClass::AnotherClass(){ MyClass myObject(...); myVector.push_back(myObject); } 之后,myObject的地址
我只是在一条简单的线上浪费了数小时,导致数据丢失我有AnotherClass持有MyClass实例的向量.这个AnotherClass通过以下方式实例化MyClass的对象:
AnotherClass::AnotherClass(){ MyClass myObject(...); myVector.push_back(&myObject); } 之后,myObject的地址被推送到一个向量(与MyClass的其他实例一起),就像在代码中编写的一样.当我开始使用AnotherClass的实例时,我注意到MyClass的值丢失了(完全随机).当我将代码更改为: AnotherClass::AnotherClass(){ MyClass* myObject = new MyClass(...); myVector.push_back(myObject); } 我没有数据丢失. 有人可以这么好解释为什么第二种创建对象的方法不会导致数据丢失吗? (没有引用我的1.000页的书籍) 解决方法
简单.第一个版本在堆栈上创建一个局部变量,当它超出范围时会自动销毁(在函数末尾)
您的向量只包含指向对象所在位置的指针. 第二个版本在堆上创建一个对象,它将一直存在,直到你最终删除它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |