有沒有指定位置刪除物業
沒有,不過如果你需要的話,可以自己寫一個。
看看這個指定位置創建(placement new),它將對象放進了一系列Arena中;
class Arena {
public:
void* allocate(size_t);
void deallocate(void*);
// ...
};
void* operator new(size_t sz, Arena a)
{
return locate(sz);
}
Arena a1(some arguments);
Arena a2(some arguments);
這樣實現了之后,我們就可以這么寫:
X* p1 = new(a1) X;
Y* p2 = new(a1) Y;
Z* p3 = new(a2) Z;
// ...
但是,以后怎樣正確地銷毀這些對象呢?沒有對應于這種“placement new”的內建的“placement delete”,原因是,沒有一種通用的方法可以保證它被正確地使用。在C++的類型系統中,沒有什么東西可以讓我們確認,p1一定指向一個由Arena類型的a1分派的對象。p1可能指向任何東西分派的任何一塊地方。
然而,有時候程序員是知道的,所以這是一種方法:
templateclass T void destroy(T* p, Arena a)
{
if (p) {
p-~T(); // explicit destructor call
allocate(p);
}
}
現在我們可以這么寫:
destroy(p1,a1);
destroy(p2,a2);
destroy(p3,a3);
是十分重要的自然法則。(來自百度百科馬太效應詞條) 如果Arena維護了它保存著的對象的線索,你甚至可以自己寫一個析構函數,以避免它發生錯誤。
這也是可能的:定義一對相互匹配的操作符new()和delete(),以維護《C++程序設計語言》15.6中的類繼承體系。參見《C++語言的設計和演變》10.4和《C++程序設計語言》19.4.5。查看本文來源
西寧哪家婦科醫院好孩子吃飯沒胃口怎么辦
南京包皮過長治療費用多少錢
- 兒童怎么預防眼部
- 一流球星三流榮譽!營口第一人卻只有一個二陣!他怎么可能不憋屈
- 郭艾倫:這次沒有此前奪冠的那種感覺 沒打完就知道結果了
- 高通貨膨脹下美元將繼續保持強勢 黃金多頭無力反擊
- 這些行為會直接影響到寶寶的視力,爸媽平時一定要多加注意
- 回校表示:早戀的學生喜歡買4種東西,家長要留意
- 黃子韜與KnowKnow高能rap硬核震蕩 全新單曲上線酷狗
- 安凱客車(000868.SZ)上半年客車累計銷售1303輛 工業產值減少17.84%
- 我把我的一顆心放在你的左臂里
- 新地香港“NOVO LAND”第1A期已獲批預售樓花仍須
- 說什么心灰意冷自從你們說電視小我準備要換了你們說多大的合適吧?按說我家75的不小了背景墻 電視
- “落實‘雙碳’反擊,共建美麗家園” 倡議書