Я бы хотел вернуть из функции некопируемый объект типа Foo
.В основном это вспомогательный объект, который вызывающий будет использовать для выполнения набора действий, с деструктором для выполнения некоторой очистки после завершения действий.
До появления rvalue ссылок ,Я бы вернул shared_ptr<Foo>
или что-то подобное.С ссылками на rvalue другой вариант мог бы сделать конструктор и конструктор копирования частным, а единственным открытым конструктором должен быть конструктор перемещения.Foo
будет выглядеть примерно так:
class Foo : boost::noncopyable
{
private:
Foo( /* whatever the real ctor needs */ );
public:
Foo( Foo && src );
// ... interesting stuff ...
};
Foo a( SomethingThatReturnsFoo() ); // allowed
Foo b; // error, no public default constructor
Foo c( a ); // error, noncopyable
Foo d = a; // error, noncopyable
Мой вопрос в том, будет ли это плохим поступком, или это выглядит разумно.Я не могу придумать причину, по которой это может вызвать проблемы или затруднить чтение, но я все еще новичок, когда дело доходит до ссылок на ценности, поэтому могут быть соображения, о которых я не думаю.