抛出赋值运算符

throw assignment operator

C++

当有人调用赋值运算符时如何抛出错误?

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

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

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

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

此时执行上面的时候,我的*a的内容被*b覆盖了。我假设它调用隐式赋值运算符,这是我不希望发生的。

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

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

我希望它抛出错误而不是上面显示的错误。比如 "you can't do this" 之类的。

如有任何帮助,我们将不胜感激。

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