c 语言new运算符重载,c – 当我们重载new运算符时,是否需要重载放置new运算符?...
通常不會(huì),因?yàn)樗唤?jīng)常使用.但它可能是必要的,因?yàn)楫?dāng)你在類中重載operator new時(shí),它會(huì)隱藏global :: operator new的所有重載.
因此,如果您想在該類的對(duì)象上使用placement new,請(qǐng)執(zhí)行;否則不要.同樣適用于新的.
如果您剛剛更改了分配方案,并且您感到驚訝的是某個(gè)地方某人正在使用背后的新位置,那么在應(yīng)用此創(chuàng)可貼之前可能需要進(jìn)行調(diào)查.
如果在標(biāo)準(zhǔn)庫(kù)容器內(nèi)部使用該類,而不是直接使用new,則自定義分配方案應(yīng)由Allocator類定義,而不是過載.默認(rèn)分配器std :: allocator不會(huì)尊重成員運(yùn)算符的新重載,而是繞過它們.見下文.
免責(zé)聲明:類范圍操作符新的重載主要用于調(diào)試,即使這樣,獲得可靠有意義的語(yǔ)義也很棘手.謹(jǐn)防:
>您還需要重載運(yùn)算符刪除. (在這個(gè)問題的例子中沒有完成.)
>過載將被限定語(yǔ)法:: new T繞過.您無法阻止此類繞過.這是std :: allocator< T>的方式.分配東西.你可以為你的類型專門化std :: allocator,但這已經(jīng)進(jìn)入了兔子洞.
>對(duì)于任何庫(kù)引入的每個(gè)::運(yùn)算符新重載,包括來自< new>的新規(guī)范,您必須考慮它是否適用于您的類并決定是否添加重載,或以其他方式應(yīng)對(duì)失敗不合格的新表達(dá).
>對(duì)于您在類中采用的每個(gè):: operator new,必須提供具有正確語(yǔ)義的相應(yīng)成員放置運(yùn)算符delete.如果構(gòu)造函數(shù)以異常退出,則調(diào)用此方法.如果沒有它,將導(dǎo)致僅在非常特定的情況下,在可能受資源約束的池中泄漏內(nèi)存.
總之,成員操作符new是防御性編碼的對(duì)立面.
總結(jié)
以上是生活随笔為你收集整理的c 语言new运算符重载,c – 当我们重载new运算符时,是否需要重载放置new运算符?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何对一个变量数据进行正则判定_生存分析
- 下一篇: 计算机网络体系结构最有影响的标准,浅谈计