Załóżmy, że mam następujący kod w C++:Czy to użycie std :: make_unique prowadzi do nieunikalnych wskaźników?
#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;
}
Jak rozumiem, unikalne wskaźniki są stosowane w celu zagwarantowania, że środki nie są wspólne. Ale w tym przypadku zarówno p1
, jak i p2
wskazują na to samo wystąpienie some
.
Prosimy o przedstawienie sytuacji.
Twoja sytuacja byłaby łatwa do zdiagnozowania, gdybyś sam wydrukował wartości wskaźników, a nie pole "a" wskazanych osób. Lub wykonałeś "głośny" konstruktor kopii. Ponadto, twoim najbardziej podstawowym błędem było prawdopodobnie myślenie 'make_unique' ustawia wskaźnik na dany obiekt (tutaj lokalna zmienna' some'); to nie jest to, co robi, lub jest przeznaczone. –
Jestem całkowicie zdumiony, że ten biedny post ma tak wiele przebojów. Co jest nie tak z SO? – Walter