【发布时间】:2019-04-14 04:32:36
【问题描述】:
C++
当有人调用赋值运算符时我如何抛出错误?
我有一个使用工厂方法而不是构造函数的基类。工厂方法读取文件并根据文件内容调用派生类构造函数。
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
我希望它宁愿抛出错误而不是上面显示的内容。比如“你不能这样做”之类的。
任何帮助将不胜感激。
【问题讨论】:
-
您是否尝试过将其公开并使用
throw? -
I would like it to rather throw an error instead of what is shown above. Like "you can't do this" or something.这不正是您现在得到的吗?编译器告诉你You can't do this。或者你可以= delete这个函数,错误会不同,结果会一样。 -
我被告知它必须显示错误消息并且赋值运算符不能公开。
-
它确实显示错误消息。你有什么问题?
-
我因为没有抛出错误而被扣分。它显示了上面显示的内容。我应该抛出一个错误,方法不能公开。