gpt4 book ai didi

c++ - 仅重新初始化派生类中的所有成员变量

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:19 25 4
gpt4 key购买 nike

我有两个类:

class NonCopyable {
private:
int key;
protected:
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator = (const NonCopyable &) = delete;
};

class Derived : public NonCopyable {
private:
std::vector<int> numbers;
float f;
int* ptr;
public:
Derived() : f(5.0f), ptr(nullptr) {}
~Derived();
};

现在,我想重新初始化 Derived 类中的所有值并调用适当的析构函数。也就是说,NonCopyable 类不应该被触及,但是 Derived 类应该被更改,就好像它是新初始化的一样。

实现此目标的最简单方法是什么?我试图避免创建一个手动重新初始化每个成员变量的成员函数。


很明显,我不能使用下面的方法:

Derived d;
// [...] many changes to d
d = Derived();

因为复制构造函数已从 NonCopyable 类中删除,而且如果不是这种情况,它会更改 NonCopyable 的成员变量。

最佳答案

如果将私有(private)数据移动到单独的聚合中,事情会变得容易得多:

struct DerivedData {
std::vector<int> numbers;
float f = 5.0;
int* ptr = nullptr;
};

class Derived : public NonCopyable {
DerivedData data;
public:
~Derived();
void reset() { data = DerivedData(); }
};

关于c++ - 仅重新初始化派生类中的所有成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933078/

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