Angenommen, ich den folgenden Code in C++ haben:Führt diese Verwendung von std :: make_unique zu nicht eindeutigen Zeigern?
#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;
}
Wie ich verstehe, sind eindeutige Hinweise verwendet, um sicherzustellen, dass Ressourcen nicht gemeinsam genutzt werden. Aber in diesem Fall verweisen sowohl p1
als auch p2
auf dieselbe Instanz some
.
Bitte enthüllen Sie die Situation.
Ihre Situation wäre leicht zu diagnostizieren gewesen, wenn Sie die Zeigerwerte selbst anstatt des a-Feldes der Spitzen gedruckt hätten. Oder du hast einen "lauten" Kopierkonstruktor erstellt. Der einfachste Fehler war wahrscheinlich, dass 'make_unique' einen Zeiger auf ein bestimmtes Objekt erzeugt (hier die lokale Variable' some'); das ist nicht das, was es tut oder ist. –
Ich bin völlig erstaunt, dass dieser arme Post so viele Upvotes bekommen hat. Was ist los mit SO? – Walter