A unique_ptr
представляет уникальное право собственности на объект. Тип разработан таким образом, что существует ровно и только один unique_ptr
, который управляет временем жизни этого объекта; поэтому он называется «уникальным».
Следовательно, если кто-то уже имеет уникальное право собственности на объект this
, вы не можете передать кому-то еще уникальное право собственности на него. Потому что тогда это не будет уникальное владение. Вы даже не можете дать текущему владельцу уникальное право собственности на this
, потому что тогда они будут владеть им в двух местах.
То, что вы хотите, не является разумным поступком. Вы либо намереваетесь использовать семантику совместного владения (и, следовательно, должны использовать shared_ptr
или какой-либо эквивалент, который имеет enable_shared_from_this
), либо вы не хотите, чтобы функция возвращала unique_ptr
.