抛出赋值运算符
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" 之类的。
如有任何帮助,我们将不胜感激。
编译时错误比运行时错误要好(因为它们可以防止开发人员认为他们的代码实际上没有机会工作)。正确的做法是将不可用的运算符和构造函数声明为私有或受保护的,这样它们就只能被 friend
s(例如工厂)使用。
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" 之类的。
如有任何帮助,我们将不胜感激。
编译时错误比运行时错误要好(因为它们可以防止开发人员认为他们的代码实际上没有机会工作)。正确的做法是将不可用的运算符和构造函数声明为私有或受保护的,这样它们就只能被 friend
s(例如工厂)使用。