C++若不想使用编译器自动生成的函数,就该明确拒绝
生活随笔
收集整理的這篇文章主要介紹了
C++若不想使用编译器自动生成的函数,就该明确拒绝
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C++若不想使用編譯器自動(dòng)生成的函數(shù),就該明確拒絕
- 為什么要拒絕?
- 將copy構(gòu)造函數(shù)或copy assignment操作符聲明為private,并且不定義
- 使用delete(C++11 )
為什么要拒絕?
比如,房產(chǎn)應(yīng)該是獨(dú)一無二的,這情況下應(yīng)該拒絕對象拷貝動(dòng)作
一般情況下,不聲明相應(yīng)函數(shù)即可拒絕。但是編譯器會為類合成一些函數(shù),因此需要顯式拒絕
還是以拒絕對象拷貝為例子,拒絕方法包括:
將copy構(gòu)造函數(shù)或copy assignment操作符聲明為private,并且不定義
(這被用于C++ iostream程序庫中)
–這種情況下member函數(shù)和friend函數(shù)還是可以調(diào)用,如果member函數(shù)或friend函數(shù)中執(zhí)行了復(fù)制,會引發(fā)鏈接錯(cuò)誤。可以使用一個(gè)基類,在基類中將copy構(gòu)造函數(shù)或copy assignment操作符聲明為private,并且繼承這個(gè)基類。這樣可以將鏈接錯(cuò)誤移至編譯期,因?yàn)閲L試拷貝時(shí),編譯器會試著生成一個(gè)copy構(gòu)造函數(shù)和一個(gè)copy assignment操作符,這些函數(shù)的“編譯器合成版”會嘗試調(diào)用其基類的對應(yīng)兄弟,而那些調(diào)用會被編譯器拒絕,因?yàn)閜rivate
使用delete(C++11 )
總結(jié)
以上是生活随笔為你收集整理的C++若不想使用编译器自动生成的函数,就该明确拒绝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽油机一抽水就熄火是怎么回事?
- 下一篇: 平安曼联红魔白金卡额度