質問

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

削除するメモリ無料は、新しいもので割り当てる必要がありますよね?これを回避する方法についてのヒントはありますか?

役に立ちましたか?

解決

boost::shared_array デフォルトの代わりに使用する2番目の引数として削除をとるコンストラクターがあります delete[].

これは、そのように適切な取引ロケーション関数のアドレスを渡すことができるかもしれないことを意味します。

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

参考文献: boost.sharedarray

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top