回答編集履歴
1
std::unique_ptr<T>とstd::unique_ptr<T\[\]>の違い
answer
CHANGED
@@ -38,4 +38,15 @@
|
|
38
38
|
|
39
39
|
とりあえず、strlenやstrcpyなどは動いているのでたぶん何でもいけるでしょう。`char[]`だと扱いにくそうなので`std::string`を返す例も作ってみました。`std::make_unique`はC++14からなので古いコンパイルにはご注意ください。
|
40
40
|
|
41
|
-
あと、returnの所に`std::move`がなくてもムーブになると思っているんですが、必要でしたっけ?
|
41
|
+
あと、returnの所に`std::move`がなくてもムーブになると思っているんですが、必要でしたっけ?
|
42
|
+
|
43
|
+
---
|
44
|
+
【追記】
|
45
|
+
|
46
|
+
[unique_ptr - cpprefjp C++日本語リファレンス](http://cpprefjp.github.io/reference/memory/unique_ptr.html)によると
|
47
|
+
|
48
|
+
> `new[]`演算子で作成された配列へのポインタにも対応している。
|
49
|
+
> * `T[]`時に`delete[]`を呼び出すように`default_delete`を特殊化している。`auto_ptr`では配列を渡すことができなかった(正確にはデストラクタで`delete[]`ではなく`delete`が呼び出されるため上手く動作しない)。
|
50
|
+
> * `unique_ptr`自体も`T[]`時には部分特殊化され、`operator[]`によるアクセスを提供している。
|
51
|
+
|
52
|
+
だそうです。`std::unique_ptr<wchar_t>`のままでも`operator[]`を使わなければ動くようですが、ポインタが破棄されるときに問題が起きるかも知れません。
|