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

class Meow
{
public:
    Meow(const Meow&) = delete;
};

将构造函数设为私有(private)不是解决方案,因为您可以执行以下操作:
class Meow
{
private:
    Meow(const Meow&);

public:
    Meow();

    void doSomething()
    {
        Meow kitty;
        Meow secondKity(kitty); // allowed
    }
};

如果将构造方法标记为deleted,则上述操作是不可能的。

最佳答案

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

您可能想使用 boost::noncopyable 对其进行更明确的说明,但它只做相同的事情。

07-24 09:51