は、私はC++で次のコードがあるとします。std :: make_uniqueを使用すると、一意でないポインタが使用されますか?
#include <memory>
#include <iostream>
struct Some {
Some(int _a) : a(_a) {}
int a;
};
int main() {
Some some(5);
std::unique_ptr<Some> p1 = std::make_unique<Some>(some);
std::unique_ptr<Some> p2 = std::make_unique<Some>(some);
std::cout << p1->a << " " << p2->a << std::endl;
return 0;
}
私は理解しているように、ユニークなポインタはリソースが共有されていないことを保証するために使用されています。しかし、この場合、p1
とp2
の両方が同じインスタンスsome
を指しています。
状況を公開してください。
ポインターの「a」フィールドではなく、ポインターの値を印刷した場合、状況を診断するのは簡単でした。または、あなたは "大きな"コピーコンストラクタを作っていました。また、最も基本的なエラーは 'make_unique'が与えられたオブジェクト(ここではローカル変数' some')へのポインタを生成すると考えることでしょう。これはそれが何をするのかではない。 –
私は完全に貧しいポストは非常に多くのupvotesを得たことに驚いています。 SOの何が問題なの? – Walter