Chcę wyjaśnić, że konstruktor mojej klasy A
przejmie na własność przekazany parametr Data
. Oczywistą rzeczą do zrobienia jest wziąć unique_ptr
o wartości:Przejmij własność parametru według wartości r-odniesienia
class A
{
public:
A(std::unique_ptr<Data> data) : _data(std::move(data)) { }
std::unique_ptr<Data> _data;
};
Jednak dla mojego użytku przypadku, nie ma powodu, dlaczego Data
powinien być wskaźnikiem, ponieważ typ wartości wystarczy. Jedyne opcja, że mogę myśleć, aby naprawdę jasne, że Data
będzie własnością A
jest podanie przez rvalue-reference:
class A
{
public:
A(Data&& data) : _data(std::move(data)) { }
Data _data;
};
Czy jest to prawidłowy sposób sygnalizować własność lub są tam lepsze opcje, aby to zrobić bez użycia unique_ptr
?
Dlaczego ctor bierze na siebie odpowiedzialność? –
Wyjaśniłbym konstruktorowi –
@IvanRubinson Z różnych powodów, takich jak Dependency Injection. –