Ich möchte klar machen, dass der Konstruktor meiner Klasse A
Besitz des übergebenen Data
Parameter übernehmen wird. Die offensichtliche Sache zu tun ist, ein unique_ptr
von Wert annehmen:Nehmen Sie Besitz von Parameter von rvalue-Referenz
class A
{
public:
A(std::unique_ptr<Data> data) : _data(std::move(data)) { }
std::unique_ptr<Data> _data;
};
jedoch für meinen Anwendungsfall gibt es keinen Grund, warum Data
sollte ein Zeiger sein, da ein Werttyp ausreichen würde. Die einzige verbleibende Option, die ich denken konnte, um wirklich deutlich zu machen, dass Data
wird von A
Besitz ist Pass von rvalue Verweise:
class A
{
public:
A(Data&& data) : _data(std::move(data)) { }
Data _data;
};
Ist dies eine gültige Weise Eigentum zu signalisieren, oder gibt es bessere Möglichkeiten, dies zu tun ohne unique_ptr
zu verwenden?
Warum übernimmt der ctor das Eigentum? –
Ich würde den Konstruktor explizit machen –
@IvanRubinson Aus mehreren Gründen, wie Dependency Injection. –