首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 預設產生的成員函式:建構、複製、賦值、解構

     編輯:關於C++

四大預設成員函式

  1. 預設建構函式(Foo())
  2. 複製建構函式(Foo(const Foo&))
  3. 複製賦值運算子(Foo& operator=(const Foo&))
  4. 解構函式(~Foo())

C++11 顯式控制

  • = default:要求編譯器產生預設實作(可用於公開/私有、內聯/非內聯)。
  • = delete:刪除該函式,禁止使用(如禁止複製)。

程式碼

/* test.cpp
 * Created on: 2014.04.14
 * Author: Spike
 */
#include <iostream>
#include <string>
using namespace std;

class Foo {
public:
    Foo(string _name) : m_name(_name) {}
    void say() { cout << m_name << endl; }
    Foo(const Foo&) = default;
    Foo& operator=(const Foo&) = default;
    ~Foo() = default;
private:
    string m_name;
};

int main() {
    Foo F1("Wang");
    Foo F2(F1);      // 複製建構
    Foo F3 = F2;     // 複製建構(複製初始化)
    F2.say();
    F3.say();
    return 0;
}

輸出

Wang
Wang

最佳實務

  • 若類別管理資源(記憶體、檔案控制代碼、鎖),必須自訂複製/移動語意(Rule of Five)。
  • 不需複製的類別(如 singleton、RAII wrapper)應 = delete 複製操作。
  • 預設解構函式為非虛擬,基類別若需多態刪除,必須宣告 virtual ~Base()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved