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

麦可

我有两节课:

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的成员变量

约翰·兹温克

如果将私有数据移动到单独的聚合中,将变得更加容易:

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(); }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Linux

Python抽象类应强制派生类在__init__中初始化变量

来自分类Python

是否应在__init__中初始化所有成员变量

来自分类Java

派生类中的变量可能尚未初始化(使用构造函数)

来自分类Dev

如何在派生类构造函数中初始化基类成员变量?

来自分类Dev

即使派生类没有成员变量,我是否需要重新实现基类的所有构造函数?

来自分类Dev

初始化类的私有成员变量

来自分类Dev

在调用基类构造函数之前,初始化派生类成员变量。这是UB吗?

来自分类Dev

初始化变量:所有成员初始化前由闭包捕获的“自我”

来自分类Dev

如何在C ++ 11中初始化未初始化其构造函数中所有成员的类

来自分类Dev

用派生类初始化成员类

来自分类Dev

派生类初始化顺序

来自分类Dev

您可以使用using将基类中的公共成员重新声明为派生类中的私有成员吗?

来自分类Dev

如何在派生类中初始化基类staic内联数据成员?

来自分类Dev

C ++-在派生类中静态初始化基类保护的成员变量

来自分类Dev

强制处理类中的所有成员变量

来自分类Dev

派生类的实例化是否为基类的私有成员分配内存?

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

为什么初始化派生类变量并分配给其基类类型不允许访问其成员?

来自分类Dev

重写派生类C ++中基类私有成员的行为

来自分类Dev

在C ++中初始化派生类参数

来自分类Dev

派生类不能访问私有成员(尽管构造函数是在基类中定义的)

来自分类Dev

可以通过以下方法在派生类中初始化受保护的基类成员:

来自分类Dev

对派生类中的成员变量使用派生类型

来自分类Dev

基类变量用派生类初始化

来自分类Dev

是否可以使用基类构造函数使用派生类将值初始化为基类私有成员?

来自分类Dev

为什么我不能在类定义中直接初始化私有成员变量

来自分类Dev

为什么派生类成员的初始化值转换为基指针时没有丢失?

来自分类Dev

派生类中来自父类的成员会干扰,具体取决于初始化

来自分类Dev

从派生类成员初始化基类引用

Related 相关文章

  1. 1

    Python抽象类应强制派生类在__init__中初始化变量

  2. 2

    是否应在__init__中初始化所有成员变量

  3. 3

    派生类中的变量可能尚未初始化(使用构造函数)

  4. 4

    如何在派生类构造函数中初始化基类成员变量?

  5. 5

    即使派生类没有成员变量,我是否需要重新实现基类的所有构造函数?

  6. 6

    初始化类的私有成员变量

  7. 7

    在调用基类构造函数之前,初始化派生类成员变量。这是UB吗?

  8. 8

    初始化变量:所有成员初始化前由闭包捕获的“自我”

  9. 9

    如何在C ++ 11中初始化未初始化其构造函数中所有成员的类

  10. 10

    用派生类初始化成员类

  11. 11

    派生类初始化顺序

  12. 12

    您可以使用using将基类中的公共成员重新声明为派生类中的私有成员吗?

  13. 13

    如何在派生类中初始化基类staic内联数据成员?

  14. 14

    C ++-在派生类中静态初始化基类保护的成员变量

  15. 15

    强制处理类中的所有成员变量

  16. 16

    派生类的实例化是否为基类的私有成员分配内存?

  17. 17

    访问派生类C ++的私有成员

  18. 18

    为什么初始化派生类变量并分配给其基类类型不允许访问其成员?

  19. 19

    重写派生类C ++中基类私有成员的行为

  20. 20

    在C ++中初始化派生类参数

  21. 21

    派生类不能访问私有成员(尽管构造函数是在基类中定义的)

  22. 22

    可以通过以下方法在派生类中初始化受保护的基类成员:

  23. 23

    对派生类中的成员变量使用派生类型

  24. 24

    基类变量用派生类初始化

  25. 25

    是否可以使用基类构造函数使用派生类将值初始化为基类私有成员?

  26. 26

    为什么我不能在类定义中直接初始化私有成员变量

  27. 27

    为什么派生类成员的初始化值转换为基指针时没有丢失?

  28. 28

    派生类中来自父类的成员会干扰,具体取决于初始化

  29. 29

    从派生类成员初始化基类引用

热门标签

归档