はじめに
C++11の文法のdeleteを使うことで、クラスのインスタンスのコピーや代入を禁止することができます。
#include <iostream> class Person { public: // 参照 const std::string m_name; int m_age; Person(const std::string name, int age) : m_name(name), m_age(age) { } // コピー禁止 (C++11) Person(const Person &) = delete; Person &operator=(const Person &) = delete; }; int main(void){ Person person1("Mickey", 15); Person person2("Tom", 30); // 名前はconstであるため、不変。年齢だけ変更されます。 //person1 = person2; std::cout << person1.m_name << std::endl; std::cout << person1.m_age << std::endl; }
参考リンク
- C++11 では、関数の使用を禁止する delete 指定 の機能が追加されました。
- コピーコンストラクタと代入演算子が呼び出されるタイミング