Cześć, mam małe pytanko odnośnie unique_ptr, ponieważ z natury jestem niezbyt ufny więc lubię moje informację potwierdzać w kilku źródłach :)
Jestem w trakcie odbywania pewnego kursu związanego z programowaniem w C++ i pojawiły się tam pewne formy tworzenia obiektów przy pomocy smart pointerów. Mając załóźmy prostą klasę A:
class A
{
public:
A()
{
cout<<"ctor"<<endl;
}
string value{"test"};
~A()
{
cout<<"dtor"<<endl;
}
};
gdy chcemy dynamicznie alokować obiekt takiej klasy przy pomocy np. unique_ptr, taka wersja:
unique_ptr<A> ptr(new A);
z tego co mi mówili prowadzący jest błędna, ze względu na to że obiekt jest dwukrotnie alokowany, raz przy użyciu operatora new, i raz dzięki unique_ptr. Przy czym jako poprawną formę przytaczają:
unique_ptr<A> ptr(make_unique<A>());
Czy przy obecnych kompilatorach stanowi to jakąś różnicę? Prosiłbym o jakiś komentarz odnośnie tego.
Kolejne moje pytanie odnosi się do dziwnego tworu, mianowicie:
unique_ptr<A> ptr(make_unique<A>(A()));
Co ja właściwie alokuje w taki sposób? Czy to jest w ogóle poprawne?
Z tego co widzę destruktor klasy A wywołuje się dwukrotnie:
ctor
dtor
dtor
Pozdrawiam.