0

Visual C++ で、メモリ アライメントを必要とする SSE2 関数を使用できるように、16 バイトでアライメントされたメモリを動的に割り当てようとしています。今、これは私がメモリを割り当てる方法です:

boost::shared_array aData(new unsigned char[GetSomeSizeToAllocate()]);

_aligned_malloc を使用してアラインされたメモリを割り当てることができることはわかっていますが、メモリを解放しようとするとブーストで問題が発生しますか? これは、ブーストがメモリを解放するために使用するコードです。

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;
}

delete によって解放されたメモリは、new で割り当てる必要がありますよね? これを回避する方法についてのヒントはありますか?

4

1 に答える 1

1

boost::shared_arraydefault の代わりに使用される 2 番目の引数としてデリータを取るコンストラクタがありますdelete[]

これは、適切な割り当て解除関数のアドレスをそのように渡すことができる可能性があることを意味します。

boost::shared_array<X> array(allocate_x(100), &deallocate_x);  

参照: Boost.SharedArray

于 2010-10-22T17:49:06.580 に答える