C++不可复制,有时除外

Coo*_*kie 7 c++ noncopyable

我发现制作一个不可复制的类对我的代码质量有很大帮助.最初我用boost :: noncopyable做了这个,但我发现VC++编译器错误没有私有成员那么有用(双击导致代码中的错误位置).

T(T const&);
T& operator=(T const&);
Run Code Online (Sandbox Code Playgroud)

事实上,它已经提醒我很多案例没有通过课程作为参考.这么多,即使在我只需要复制构造一次的类上,我也非常希望得到警告.

有没有办法做到这一点?我想的是将上面两个方法保留为私有并添加一个公共T(T const&,bool dummy)构造函数来调用,当我真的想要复制构造时.或者可以选择将上面的两个方法公开,并在复制构造时以某种方式激活编译器警告,抑制我想要的警告.

或者也许有更好的方式?

Ste*_*sop 6

不确定它是否正是您想要的,但如果您标记复制构造函数,explicit则该类不能通过值传递或复制初始化,但您可以使用直接初始化复制构造.

你可能想要让赋值运算符保持私有,也许一个NonAssignable基础对它有用.