C++ 抛出赋值运算符

C++ 抛出赋值运算符,c++,assignment-operator,C++,Assignment Operator,C++ 当有人调用赋值运算符时,如何抛出错误 我有一个基类,它使用工厂方法而不是构造函数。工厂方法读取文件并基于文件内容调用派生类构造函数 Base *a::create(file1); Base *b::create(file2); 如果有人调用赋值运算符,我想抛出一个错误 *a = *b; // filetype contents don't match 在执行上述操作时,my*a的内容被*b覆盖。我假设它调用隐式赋值运算符,这是我不希望发生的 当我声明赋值运算符为private时。当我

C++

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

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

Base *a::create(file1);
Base *b::create(file2);
如果有人调用赋值运算符,我想抛出一个错误

*a = *b; // filetype contents don't match
在执行上述操作时,my*a的内容被*b覆盖。我假设它调用隐式赋值运算符,这是我不希望发生的

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

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
我希望它抛出一个错误,而不是上面显示的错误。比如“你不能这么做”之类的


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

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

您是否尝试将其公开并使用
抛出
我希望它抛出一个错误,而不是上面显示的错误。比如“你不能这么做”之类的。
这不正是你现在得到的吗?编译器告诉您
不能执行此操作
。或者,您可以
=删除该函数,错误将不同,结果将相同。我被告知它必须显示错误消息,赋值运算符不能公开。它确实显示错误消息。你有什么问题?我因为没有出错而被扣分。它显示了上面显示的内容。我应该抛出一个错误,方法不能公开。你不能删除现代C++中的赋值操作符吗?@ JONAATEN LIFFLER:当然,你可以<代码> =删除< /C>操作符,在这种情况下,它们是否是代码>公共< /代码>不重要。很好,假设工厂不需要这些功能。