我在main中有以下代码:
void *pmemory;
pmemory = malloc(ONEGIG_SIZE);
PoolAllocator* poolAllocator = new PoolAllocator(sizeof(Obj), __alignof(Obj), ONEGIG_SIZE, pmemory);
Obj *obj1 = allocator::allocateNew(*poolAllocator, Obj("Temp"));
allocator::deallocateDelete(*poolAllocator, obj1);
deallocateDelete()方法中的代码如下:
template<class T> void deallocateDelete(Allocator& allocator, T& object)
{
object.~T();
allocator.deallocate(&object);
}
我注意到如果我将T对象作为引用传递给deallocateDelete()方法,则以下行(对象.~T();)不起作用,我的意思是不会调用析构函数。但是如果我将参数更改为指针T *对象,则会调用析构函数。任何人都可以解释我为什么会这样?
答案 0 :(得分:0)
我的意思是析构函数不被称为
实际上,析构函数在技术上被称为。只是T
的析构函数是微不足道的,所以无法观察它的调用。
我怀疑您认为T
是Obj
。但事实并非如此:您传递给函数的对象是Obj*
,因此推理的参数为Obj*&
。
要使用deallocateDelete
参数调用Obj&
,必须取消引用指针(就像取消引用指向分配器的指针一样):
allocator::deallocateDelete(*poolAllocator, *obj1);
// ^