我想复制一个对象到另一个对象。但我的第一个对象有一个属性指向同一个对象内的另一个变量。例如:复制其中的指针对象到另一个对象
int* a;
我想要做的是使该对象的副本,但通过我的调试器,我可以清楚地看到,
int* a;
完全一样地址作为我复制的对象的int* a;
,当我不希望它这样做时。
我希望它指向自己在内存中的位置,而不是改变原始对象。
我想复制一个对象到另一个对象。但我的第一个对象有一个属性指向同一个对象内的另一个变量。例如:复制其中的指针对象到另一个对象
int* a;
我想要做的是使该对象的副本,但通过我的调试器,我可以清楚地看到,
int* a;
完全一样地址作为我复制的对象的int* a;
,当我不希望它这样做时。
我希望它指向自己在内存中的位置,而不是改变原始对象。
您应该为此创建一个拷贝构造函数。 基本复印操作将复制到曲面中。 (成员明智的副本)
YourClass::YourClass(const YourClass& p) {
x = p.x;
y = p.y;
*a = *(p.a);
}
你应该在构造函数的指针分配空间。
在这种情况下,您需要编写一个赋值操作符和一个拷贝构造函数。我会告诉你一个更完整的文章,其中描述了两者。如有必要,您还可以在网上搜索更多示例。 http://www.cplusplus.com/articles/y8hv0pDG/
如果你有一个C++ 11兼容的编译器,那么我也会考虑使用智能指针,如果我是你。
你必须为此编写代码。复制指针不会改变它。 –
使用复制构造函数,但请确保遵循[三规则](https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29) – clcto
您可能想要检查深层复制。 –