初始化不可复制的成员

sor*_*h-r 1 c++ design-patterns

我需要使用包含一些不可复制类的代码库.他们已将其赋值运算符和复制构造函数声明为私有.如何在我的课程中初始化这些类型的成员?例如:

class non_copyable; // defined somewhere. 
                    // constructor receives a parameter of type `normal_class'
// my_class.hpp
class my_class {
public:
    my_class();
    virtual ~my_class();
private:
    normal_class good_one;
    non_copyable trouble;
};
my_class::my_class() :
        good_one(normal_class(0,0)), 
        trouble(non_copyable(good_one)) { // ====> error
}
Run Code Online (Sandbox Code Playgroud)

目前我使用的指针non_copyablemy_class.

jua*_*nza 8

你在这里调用复制构造函数,因为你是trouble从一个临时non_copyable实例构建的:

trouble(non_copyable(good_one))
//        ^^^ temporary non_copyable.
Run Code Online (Sandbox Code Playgroud)

试试这个:

trouble(good_one)
Run Code Online (Sandbox Code Playgroud)

  • @soroush使用像这样的复制构造函数不是一个好主意.在语义上,你正在生成非专业副本(尽管它们可能会被删除). (3认同)