在Visual C ++中,我试图动态分配一些16字节对齐的内存,这样我就可以使用需要内存对齐的SSE2函数。现在这就是我分配内存的方式:
boost::shared_array aData(new unsigned char[GetSomeSizeToAllocate()]);
我知道我可以使用_aligned_malloc来分配对齐的内存,但是当它试图释放内存时会导致boost的问题吗?这是代码提升用于释放内存:
template inline void checked_array_delete(T * x)
{
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete [] x;
}
删除的内存必须用new分配,对吗?关于如何解决这个问题的任何提示?
答案 0 :(得分:1)
boost::shared_array
有一个构造函数,它将删除器作为第二个参数使用,而不是默认的delete[]
。
这意味着您可以像这样传递合适的释放函数的地址。
boost::shared_array<X> array(allocate_x(100), &deallocate_x);
参考文献:Boost.SharedArray