1. ホーム
  2. c++

このC++オブジェクトをコピーできないようにするにはどうしたらいいですか?

2023-12-25 14:53:28

質問

タイトルをご覧ください。

あります。

class Foo {
   private:
     Foo();
   public:
     static Foo* create();
}

Fooをコピーできないようにするには、ここからどうすればいいのでしょうか?

ありがとうございます。

どのように解決するのですか?

class Foo {
   private:
     Foo();
     Foo( const Foo& ); // non construction-copyable
     Foo& operator=( const Foo& ); // non copyable
   public:
     static Foo* create();
}

boostを使用している場合は、noncopyableを継承することも可能です。 http://www.boost.org/doc/libs/1_41_0/boost/noncopyable.hpp

EDIT: この機能をサポートしているコンパイラを使用している場合、C++11バージョン。

class Foo {
   private:
     Foo();
   public:
     Foo( const Foo& ) = delete; // non construction-copyable
     Foo& operator=( const Foo& ) = delete; // non copyable

     static Foo* create();
}

削除されたメソッドはpublicであるべきであることに注意してください。 https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-delete