Неправильно ли предоставлять только конструктор перемещения?

Я хотел бы вернуть некопируемый объект типа Foo из функции . По сути, это вспомогательный объект, который вызывающий будет использовать для выполнения набора действий, с деструктором для выполнения некоторой очистки после завершения действий.

До появления ссылок на rvalue я бы имел вернул shared_ptr или что-то подобное. При использовании ссылок 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

Мой вопрос в том, будет ли это плохим тоном или выглядит разумным. Я могу' Я не думаю о какой-либо причине, по которой это могло бы вызвать проблемы или затруднить чтение, но я все еще в некоторой степени новичок, когда дело касается ссылок на rvalue, поэтому могут быть соображения, о которых я не думаю.

7
задан James McNellis 7 September 2010 в 05:53
поделиться