KWJ*_*104 0 c++ memory-management
假设我有一个对象,其目的是为对象类型MyObject保存一堆指针,并且假设我想要一个将新的MyObjects添加到集合中的函数,如下所示:
void MyCollection::addObject(){
MyObject *newObject = new MyObject();
MyCollection.add(mycollection, newObject);
}
Run Code Online (Sandbox Code Playgroud)
让我们说MyCollection.add接受一个特定的集合对象和一个指针,并以某种方式在内部存储它.但是这个函数的问题是当newObject本身是持久的时,*newObject指针在函数调用之后被销毁,所以add()函数不再有一个真正指向该对象的指针.是否有任何好方法以某种方式制作持久性指针?
谢谢
但是这个函数的问题是当newObject本身是持久的时,*newObject指针在函数调用之后被销毁,所以add()函数不再有一个真正指向该对象的指针.
这背叛了对象和指针如何工作的巨大误解.
指针是一个地址.new在堆上创建一个对象并返回该地址.当您将该地址传递给集合时,集合将获取该地址的副本,该地址与您获得的地址完全相同new.当变量newObject超出范围并被销毁时,集合仍然具有地址的副本,并且地址仍然指向该对象.无论你制作和销毁多少份地址,地址仍然很好,地址指向的对象仍然很好.
实际上,您从中获取new的地址是new内部生成的地址的副本,并且原始的内部值被销毁.而当你说MyObject *newObject = new MyObject();你正在制作另一份副本时.但这并不重要,因为地址的每个副本都与其他副本一样好.