gpt4 book ai didi

c++ - 确保克隆时不修改类成员变量

转载 作者:行者123 更新时间:2023-12-01 14:47:37 24 4
gpt4 key购买 nike

我正在尝试为 A 类添加一个克隆函数。这个类有一个非 const 且不拥有的指针 b_。我想确保克隆的对象中不会修改b_,但是修改其他成员变量是可以的,并且仍然可以调用A中的这些非常量func。

一个不好的方法是添加一个标志并在每次修改 b_ 之前检查它。这很糟糕,因为如果在 A 中添加了一个新函数,其他人可能会忘记检查它。

有没有更好的方法来实现这个目标?

这是我上面提到的不好的解决方案:

class A {
public:
A* clone() const {
auto* clone = new A(*this);
clone->is_cloned_ = true;
return clone;
}
void DoSomething() {
if (!is_cloned_){
b_->NonConstFunc();
}
}

void DoSomethingElse() {
other_values = 2; // cloned versions can modify this.
}
private:
is_cloned_ = false;
B* b_; // Not owned
int other_values = 1;
}

最佳答案

你也许可以设计一个这样的类层次结构:

class cloned_A;

class A
{
public:
cloned_A *clone ();
private:
B* b_;
};

class cloned_A : public A
{
public:
cloned_A (const B *b) : read_only_b (b) {}
private:
const B* read_only_b;
};

cloned_A *A::clone ()
{
return new cloned_A (b_);
}

现在 b_A 是私有(private)的而克隆的对象只能访问 read_only_b通过 const指针,因此无法修改它。

关于c++ - 确保克隆时不修改类成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62350381/

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