c 新特性之default,delete

2021-10-09 07:09:45 字數 1462 閱讀 4065

c++新特性之default,delete

用法=default 表示使用編譯器為我們提供的實現,=delete表示刪除函式,不實現。

=default =delete一般只能用在編譯器為我們生成的函式上,比如建構函式,拷貝構造,析溝函式(不要使用=delete),賦值等。

=delete可以用在普通成員函式,但是沒有意義。=delete修飾析構函式時,無法進行釋放物件,因此無法生成臨時變數,無法進行delete,也無法當作父類。

下面進行測試:

struct complex

void print() = delete; //ok

//void print2() = default; //errror

~complex()=delete;

};int main()

在c++11之前如果我們自行定義了乙個建構函式,那麼編譯器就不會生成乙個預設的建構函式。

在c++11中我們可以加上=default,獲得並使用預設的建構函式。

例如:

class zoo 

zoo() = default;

zoo(const zoo&) = delete;

zoo(zoo&&) = default;

zoo& operator=(const zoo&)=default;

zoo& operator=(const zoo&&)= delete;

virtual ~zoo(){}

private:

int d1,d2;

}

其他

空類什麼時候不空?

我們定義乙個空類,編譯器就會為它宣告乙個拷貝構造,乙個拷貝賦值,和析構,建構函式。這些函式都是public且inline.

class empty{};
我們定義了empty,當我們沒有呼叫構造,析構等函式時,編譯器是不會給我們合成的。

唯有這些函式被呼叫時,它們才會被編譯器合成。

常見用法nocopy

將拷貝相關的**delete,實現nocopy 功能

class nocopy

當我們需要實現這個功能時只需要繼承 nocopy就可以了。

當然實現nocopy還有其他方式,將拷貝構造,拷貝賦值的屬性變為private。這種方式對於友元是無效的。

如下是boost::noncopyable實現。

class noncopyable

~noncopyable(){}

private:

noncopyable(const noncopyable&){}

const noncopyable& operator=(const noncopyable&){}

}

c 之函式新特性

void fun int i,int j 5 int k 10 void fun int i,int j 5,int k 錯誤,沒有預設值的引數放前面實參可以覆蓋形參的值 什麼是函式過載?在相同的作用域內,用同一函式名定義的多個函式 引數個數和引數型別不同 int getmax int x,int ...

C 程式設計題之新特性

1.語言可用性的強化 1 nullptr 本質還是0,但相對於null提供了型別 2 範圍for 3 auto自動推導型別 4 迭代器遍歷 5 繼承構造與委託構造 6 override 修飾虛函式,編譯器將檢查基類的函式是否存在這樣的虛函式 7 final 修飾類,表示該類不可繼承 修飾虛函式,表示...

C 4 0 新特性之引數

c 4.0中新加了幾種引數,今天來了解一下 1.預設引數 c 4.0 現在對方法,構造器,以及索引器支援使用可預設的引數 當引數的預設值作為宣告的一部分被指定的時候,引數就是可預設的。static void changevalue intx,inty 3 int y 有乙個預設的引數3,因此它是乙個...