Próbowałem pisania tej klasyDziwne zachowanie dla unique_pointer w Visual Studio 2010
#include <memory>
class ContainerUnique
{
public:
ContainerUnique(void);
~ContainerUnique(void);
private:
std::unique_ptr<UniqueElement> u;
};
Gdzie UniqueElement jest klasa POD zdefiniowane gdzie indziej. Teraz definiuję korpus konstruktora w następujący sposób:
ContainerUnique::ContainerUnique(void)
{
auto tmp = new UniqueElement(1);
this->u(tmp); // u is a unique_ptr<UniqueElement>. Should this call compile?
}
I spełnia wszystkie wymagania bez wyjątków. Uruchamianie programu Zauważyłem, że po wywołaniu konstruktora ContainerUnique
, u
zawiera zerowy wskaźnik.
Czy to jest zamierzone zachowanie? I do jakiej konkretnie metody wzywam?
Nie jesteś pewien problemów, które napotykasz. Ale unikaj ich, inicjując zmienną składową u na liście initialaztrion konstruktora. –
Tak, to jest rozwiązanie, którego użyłem w moim prawdziwym kodzie, ale nadal nie jestem pewien co dzieje się w tym przykładzie. –
Spróbuj wydrukować typ swojej automatycznej zmiennej. Nie wiem, czy działa typid. Gdy znacie typ, reszta powinna być łatwa. –