Pre C++ 11等效于显式删除构造函数(Type(const Type&)= delete;)

Get*_*eto 2 c++ constructor c++11

有没有办法在不支持C++ 11的编译器上实现这种行为?

class Meow
{
public:
    Meow(const Meow&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

使构造函数私有不是一个解决方案,因为那样你可以做这样的事情:

class Meow
{
private:  
    Meow(const Meow&);

public:
    Meow();

    void doSomething()
    {
        Meow kitty;
        Meow secondKity(kitty); // allowed
    }
};
Run Code Online (Sandbox Code Playgroud)

如果构造函数被标记为deleted上面是不可能的.

Jos*_*eld 7

使构造函数成为私有是C++ 11之前的解决方案.您的第二个代码无效,因为复制构造函数没有定义(假设您没有在其他地方给出定义).是的,这不是最好的解决方案,但这就是为什么= delete被引入.

你可能想要boost::noncopyable更明确地使用它,但它只做同样的事情.