有没有指定位置删除物业
没有,不过如果你需要的话,可以自己写一个。
看看这个指定位置创建(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的不小了背景墙 电视
- “落实‘双碳’反击,共建美丽家园” 倡议书