インスタンス化する方法
unique_ptr<int[]> sums;
の
int main(int argc, char** argv)
{
int n = //get from args
sums(new int[n]);
}
? 次のコンパイル時エラーが表示されます
エラー C2247: 'std::default_delete<_Ty>::operator ()' にアクセスできません。
インスタンス化する方法
unique_ptr<int[]> sums;
の
int main(int argc, char** argv)
{
int n = //get from args
sums(new int[n]);
}
? 次のコンパイル時エラーが表示されます
エラー C2247: 'std::default_delete<_Ty>::operator ()' にアクセスできません。
C++ のコンストラクター呼び出し構文について混乱しているようです。
あなたが言うなら
unique_ptr<int[]> sums(new int[n]);
sums
これは、int 配列へのポインターを使用してコンストラクターを呼び出し、という新しいオブジェクトを構築します。
あなたが言うなら
unique_ptr<int[]> sums;
sums(new int[n]);
最初の行で 0 引数のコンストラクターを使用して構築sums
し、2 行目でオブジェクトの呼び出しunique_ptr<int[]>::operator()(int*)
(つまり、関数呼び出し演算子) を試みsums
ます。これは存在しないため、エラーが発生します。
dauphicの答えが言うように、あなたが探している関数は呼び出されreset
ます:
sums.reset(new int[n]);
(なぜ関数呼び出し演算子のようなばかげたものが存在するのか不思議に思うかもしれません。関数のように呼び出すことができるが、値のように渡すことができるオブジェクトを作成できるようにするためにあります。 )
sums
関数であるかのように呼び出そうとしていますが、そうではありません。の内部構造によりstd::unique_ptr
、エラー メッセージがわかりにくく誤解を招きます。
sums
何を指すかを初期化したい場合は、reset
関数を使用する必要があります。
sums.reset(new int[n]);