是否存在一些情况,使用标准的new
/delete
不足以满足我们的需求,需要显式调用析构函数,例如pA->~A()
?
我认为这只在一些资源管理类中是必要的,但通常不是一个好主意。析构函数会在作用域结束时自动调用,所以为什么要手动调用呢?
通过示例进行解释会更好!
是否存在一些情况,使用标准的new
/delete
不足以满足我们的需求,需要显式调用析构函数,例如pA->~A()
?
我认为这只在一些资源管理类中是必要的,但通常不是一个好主意。析构函数会在作用域结束时自动调用,所以为什么要手动调用呢?
通过示例进行解释会更好!
m
切换为新活动成员 n
:u.m.~M();
new (&u.n) N;
new
构造的对象。malloc
/free
兼容的API(例如,与允许指定自定义C样式分配器的C客户端进行交互),请看下面的例子:void* buf = malloc(sizeof (MyType));
if (buf) {
MyType* foo = new (buf) MyType;
// ...
foo->~MyType();
free(buf);
}
shared_ptr
或unique_ptr
。)delete
吗?能否举个例子? - Oleksiydelete
释放通过new
分配的对象。我提供了一个例子,其中底层内存是使用malloc
分配的。 - C. K. Youngdelete
并不 (必然) 使用 free
,就像 new
不(必然)使用 malloc
一样。C++系统有其自己的分配器,默认的 new
和 delete
使用它。无论如何,这都是无关紧要的,因为我的例子应该是可推广到 C 客户端指定自定义分配器(使用 malloc
/free
接口)的情况。 - C. K. Young
union
的成员使用时,编译器需要创建一条诊断信息。 - Dietmar Kühl