nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

コピーコンストラクタと代入演算子の禁止方法

はじめに

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;
    
}

参考リンク