我有一些类似如下的代码:
MyClass* a = new MyClass();
vector[0] = *a;
MyClass KeepCopy = vector[0];
//
//
vector gets changed
//
//
return KeepCopy
现在向量做了很多事情,然后被覆盖了。但是,我希望在函数的末尾返回KeepCopy的值。但是,因为向量没有指向其他东西,所以我认为返回的数据是错误的。
EDIT3:好的,事情是这样的。KeepCopy被赋值给向量,然后在代码中,我对向量做了一些事情。我在想,KeepCopy仍然指向向量的一个版本,但看起来KeepCopy只包含赋值时的值的副本。
稍后,我将向量赋给另一个向量对象(我一次读取两行文本文件,向量包含一行,另一个向量对象包含第二行)。如何确保KeepCopy指向原始的向量元素(在我开始解析文本文件中的每一行之前,重新分配向量)?
发布于 2012-05-27 16:16:53
由于您是按值(而不是按指针/引用)存储对象,因此对vector[0]
的更改不会反映在KeepCopy
中,除非您在MyClass
实例中共享指向同一包含对象的指针
如果是这样的话,你应该实现一个合适的复制构造函数来制作原始文件的深拷贝(而不是默认的浅拷贝,它只是盲目地拷贝指针的值)。
发布于 2012-05-27 16:15:22
实现MyClass的复制构造函数并复制对象。而不是指针。
发布于 2012-05-27 16:17:13
与您所做的完全一样:MyClass KeepCopy = vector[0];
将KeepCopy
设置为原始对象的副本(通过其复制构造函数)。此副本与向量没有连接,因此它不会受到修改向量的影响。
https://stackoverflow.com/questions/10775398
复制