2015-07-14 13 views
5

Czystd :: unique_ptr członkiem struktura do rodzaju konstrukcji

struct A 
{ 
    std::unique_ptr<A> a; 
}; 

dopuszczone przez standard? Nie sądzę, że dotyczy to typów kontenerów, takich jak std::set, ale czy jest coś szczególnego specjalne o unique_ptr?

+0

Jest to raczej przykład członka tego samego typu. Uświadomienie sobie, że to samo w sobie, wprowadziłoby cykliczne odniesienie. – alexm

Odpowiedz

4

Tak, jest to wyraźnie dozwolone. C++ 14 (n4140) 20.8.1/5:

... Parametr szablonu T z unique_ptr mogą być niekompletne typu.

Jest również dozwolone dla std::shared_ptr i std::weak_ptr, używając podobnych sformułowań.

0

Pewnie, że jest dozwolone. Jest to w zasadzie implementacja pewnego rodzaju ścieżki .

+1

Nie rozumiem, przepraszam. –

0

Według tego reference:

std :: unique_ptr może być wykonana za niepełny typu T, jak ułatwić zastosowanie jako uchwytu w idiomu Pimpl. Jeśli używany jest domyślny delilator , T musi być kompletny w miejscu kodu, w którym wywoływany jest dziennik , który ma miejsce w destruktorze, przenieść operator przypisania i zresetować funkcję składową std :: unique_ptr.

Tak, tak std::unique_ptr może być używany w ten sposób.

Powiązane problemy