抛出分配运算符

时间:2018-11-11 03:00:41

标签: c++ assignment-operator

C ++

当有人呼叫赋值运算符时,如何引发错误?

我有一个使用工厂方法而不是构造函数的基类。工厂方法读取文件并根据文件内容调用派生类构造函数。

Base *a::create(file1);
Base *b::create(file2);

如果有人调用赋值运算符,我想抛出一个错误。

*a = *b; // filetype contents don't match

此时,执行上述操作时,* b覆盖了我* a的内容。我假设它正在调用隐式赋值运算符,这是我不想发生的事情。

当我将赋值运算符声明为私有时。在单独的测试文件中运行它时,出现以下错误。

test.cc:34:13: fatal error: 'operator=' is a private member of 'Test'
    *aa = *ad;
    ~~~ ^ ~~~
./Base.h:14:16: note: declared private here
    Base& operator=(const Base &rhs);
           ^
1 error generated.
make: *** [test] Error 1

我希望它抛出一个错误而不是上面显示的错误。像“你做不到”之类的。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

编译时错误比运行时错误要好(因为它们使开发人员认为他们的代码在实际上没有机会时可能会工作)。正确的做法是将不可用的运算符和构造函数声明为私有或受保护的,以便它们只能由friend(例如工厂)使用。