#include <iostream>
#include <memory>
using namespace std;
int main() {
std::unique_ptr<int> ptrA = std::make_unique<int>(10);
ptrA = std::make_unique<int>(20); // case I
return 0;
}
#include <iostream>
#include <memory>
using namespace std;
int main() {
std::unique_ptr<int> ptrA = std::make_unique<int>(10);
ptrA = nullptr; // case II or ptrA.reset()
ptrA = std::make_unique<int>(20);
return 0;
}
多くの人がCase II
を使用しています。しかし、std::unique_ptr
はスマートポインタですから、nullptr
を割り当てるか、reset
を呼び出して新しい値を再割り当てする必要があります。は新しい値を割り当てる前に `nullptr`を` std :: unique_ptr`に割り当てる必要がありますか?
私が間違っている場合は、私に修正してください。 nullptr
に最初に割り当て
は、なぜあなたはにはstd :: make_unique(10)を割り当てているのgcc 7.2および-O3でコードをhttps://godbolt.org/でのコンパイラのエクスプローラptrA = 20 - またはさらに短くすることができます:ptrA = std :: make_unique (20)を実行して、それを終了しますか?または、質問に文脈をもう少し与えるか? –
stijn
@stijnこのコードは実際のコードではなくアイデアを説明するためのものです。 – Slava
@stijn、代入演算子を記述しているとしたら、そのメンバーの1つはunique_ptrです。 – q0987