lur*_*her 1 c++ return-by-reference default-copy-constructor
我有一个功能界面:
struct iFace {
virtual Type& getType() = 0;
}
Run Code Online (Sandbox Code Playgroud)
并且想法是检索它,如:
iFace& iface = getIface();
Type& type = iface.getType();
Run Code Online (Sandbox Code Playgroud)
然而,我偶尔会犯错误并写道:
Type type = iface.getType();
Run Code Online (Sandbox Code Playgroud)
按值复制,这是我想要避免的.但是,当我犯这样的错误时,编译器不会发出警告,因为它的法律语法.我想为此触发一个编译时错误,问我有什么选择?
我想要声明一个复制构造函数,但没有在任何地方定义它,如果使用它会导致链接时错误,但是我将无法在任何情况下使用复制构造函数,这不是很容易
通过将复制构造函数和赋值运算符置于"private"下,使iFace不可复制.然后提供显式的Copy方法.
class Type {
public:
virtual Copy(Type& dest) = 0;
private:
Type (const Type &) {assert(false)}
Type & operator=(const Type &) {assert(false)}
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用boost noncopyable来做同样的事情(它的实现如上).
因此,如果您希望复制代码,您可以这样做
Type& type = iface.getType();
Type typeCpy;
type.Copy(typeCpy);
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 我补充一点,如果你因为性能问题而这样做,你确定优化器不会为你删除临时副本吗?
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |