私はstd::unique_ptr
を初期化しようとするが、それはコンパイルに失敗します。deleterでunique_ptrコンストラクタを呼び出す方法は?
error: no matching function for call to ‘std::unique_ptr<int, void (*)(int*)>::unique_ptr(int*, void (&)(void*) throw())’
m_head((int*)malloc(m_capacity * sizeof(int)), std::free) {
^
この私のコード:
class deque {
const int INC_ARRAY = 2;
int m_front, m_back;
int m_capacity;
std::unique_ptr<int, void (*)(int *)> m_head;
public:
const int EMPTY_DEQUE = -1;
/**
* @brief Constructor
*/
deque()
: m_front{INC_ARRAY - 1}, m_back{INC_ARRAY},
m_capacity{2 * INC_ARRAY},
m_head{(int*)malloc(m_capacity * sizeof(int)), std::free} {
}
};
私はnew
、malloc
を使用する必要はありません。正しく初期化するには?
P.S.私はC++だけを学んでいます
使用しているCスタイルのキャストの代わりに、static_cast(malloc ...)を使用することをお勧めします。 'static_cast'はうまくいくと思いますが、' reinterpret_cast'が必要な場合があります。これらのキャストは、Cスタイルのキャストよりも、より具体的です(したがって、より安全です)。また、コード内で選択するのも簡単です。 –
Omnifarious
@Omnifarious、アドバイスありがとうございます! –
"*' new'ではなく 'malloc'を使う必要があります*" - なぜですか? 'malloc'はCではなくC++です。 'new'はC++でメモリを割り当てる公式な方法です。そのためには、自動的に解放される動的配列を割り当てるだけです。 C++にはその目的のための 'std :: vector'クラスがあります。 –