防止在C++中调用基本分配运算符

Prevent call to base assignment operator in C++

本文关键字:分配 运算符 调用 C++      更新时间:2023-10-16

我的库中有这两个类:

class Base {
    int _handler;
protected:
    Base() = default;
    Base& operator=(int h) {
        this->_handler = h;
        return *this;
    }
};
class Derived : public Base {
protected:
    Derived() = default;
    void initialize() {
        this->Base::operator=(12345); // internal stuff
    }
};

Derived类可由用户继承。他应该这样做:

class User_Class : public Derived {
    void foo() {
        this->initialize();
    }
};

但相反,他这样做:

class User_Class : public Derived {
    void foo() {
        this->Base::operator=(999); // no, you broke it!
    }
};

如何防止调用Base赋值运算符?

当我将标题更改为此标题时

class Derived : private Base

编译器立即使用"无法访问在类'Base'中声明的不可访问成员"阻止对operator=的调用,但是调用初始化的代码可以正常工作,因为它是可访问的。

但是,您还应该覆盖 Derived 中的 operator=,并让它检查它是否已初始化。 不要让客户端类处理内部簿记。