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