gpt4 book ai didi

c++ - 在 C++ 中获取 "this"(当前实例)的拷贝

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:00 24 4
gpt4 key购买 nike

我想要一个当前正在运行的实例的拷贝。

当我更改拷贝中的值时,原始对象也会受到影响。拷贝充当实例。

如何避免这种情况?我需要创建调用对象的独立拷贝。

 Set operator+(Set s){
Set temp = *this;

for(int i=0; s.elements[i] != '\0'; i++){
temp(s.elements[i]);
}
temp.elements[0] = 'X'; // <- this affects calling object also :(

return temp;

}

最佳答案

问题在于 Set temp = *this; 进行的是浅拷贝,而不是深拷贝。您必须修改 Set 类的复制构造函数和赋值运算符,以便它们复制所有成员/包含的对象。

例如:

class Set
{
public:
Set()
{
elements = new SomeOtherObject[12];
// Could make elements a std::vector<SomeOtherObject>, instead
}

Set(const Set& other)
{
AssignFrom(other);
}

Set& operator=(const Set& other)
{
AssignFrom(other);
return *this;
}

private:
void AssignFrom(const Set& other)
{
// Make copies of entire array here, as deep as you need to.
// You could simply do a top-level deep copy, if you control all the
// other objects, and make them do top-level deep copies, as well
}

SomeOtherObject* elements;
};

关于c++ - 在 C++ 中获取 "this"(当前实例)的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com