C++構造函數的default和delete


C++11中,當類中含有不能默認初始化的成員變量時,可以禁止默認構造函數的生成,

myClass() = delete;//表示刪除默認構造函數

myClass() = default;//表示默認存在構造函數

當類中含有不能默認拷貝成員變量時,可以禁止默認構造函數的生成,

myClass(const myClass&) = delete;//表示刪除默認拷貝構造函數,即不能進行默認拷貝

myClass & operator=(const myClass&) = delete;//表示刪除賦值操作符,即不能進行賦值操作

 

class CTest
{
public:
    CTest() = default;    //語句1
    CTest(int x)
    {
        printf("this is CTest(int) create x\n");
    }

    ~CTest()
    {
        printf("this is ~CTest destory\n");
    }

    CTest& operator= (const CTest&) = delete; //語句2
};

int main()
{
    CTest* ptr = new CTest;    //此處如果沒有語句1,則編譯失敗;

    CTest p1(1);
    CTest p2(2);
    p2 = p1; //此處編譯失敗,因為有語句二存在,已經將賦值操作符設置為已刪除函數
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM