C++11 oop中的default、delete與Noncopyable
default
在C++11標準中,可以使用default關鍵字來顯式地聲明默認的構造函數和析構函數。
使用default關鍵字可以用來顯式聲明默認的構造函數和析構函數。這樣做可以讓編譯器自動生成默認實現
–>->->關于構造函數<-<-<–
class A {
public:// 顯式聲明默認構造函數A() = default;// 顯式聲明默認析構函數~A() = default;
};int main() {A obj; // 調用默認構造函數return 0;
}
注意:
1. Defaulted 函數特性僅適用于類的特殊成員函數,且該特殊成員函數沒有默認參數。
2. Defaulted 函數既可以在類體里(inline)定義,也可以在類體外定義。
delete
使用delete關鍵字的函數在其他地方無法使用,即這個函數不存在,禁止定義。
class A {
public:// 禁止拷貝構造函數 A (const A &) = delete; //“delete”特性可以作用于非特殊成員函數void f() = delete;
};int main() {A obj; // 調用默認構造函數return 0;
}
Noncopyable不可拷貝對象
封裝一個不可拷貝對象Noncopyable,當類需要不可拷貝時可繼承自Noncopyable
#ifndef __RADIXUN_NONCOPYABLE_H__
#define __RADIXUN_NONCOPYABLE_H__namespace radixun{/*** @brief 對象無法拷貝,賦值*/
class Noncopyable{
public:/*** @brief 默認析構函數*/Noncopyable() = default;/*** @brief 默認析構函數*/~Noncopyable() = default;/*** @brief 拷貝構造函數(禁用)*/Noncopyable(const Noncopyable&) = delete;/*** @brief 賦值函數(禁用)*/ Noncopyable& operator=(const Noncopyable&) = delete;
};}#endif