Bir işlevden Foo
türünde bir araya getirilemez nesne döndürmek istiyorum. Bu temel olarak, arayanın eylemleri tamamladıktan sonra bir temizleme gerçekleştirmek için bir eylemci kümesi gerçekleştirmek için kullanacağı yardımcı bir nesnedir. rvalue references gelişiyle önce Sadece bir hareket yapıcı sağlamak için kötü bir form mu?
shared_ptr<Foo>
falan döndü. Rvalue referansları ile, kurucu ve kopya kurucuyu özel yapmak ve tek kamu kurucusunun bir hareket yapıcısı olması için başka bir seçenek olacaktır.
Foo
böyle bir şey görünecektir:
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
sorum bunu yapmak için kötü olacak mı kaynaklandığı, yoksa makul görünüyor olmadığını. Bunun neden sorunlara yol açacağını ya da okumayı zorlaştıracağını düşünemiyorum, ancak referanslar söz konusu olduğunda hala yeni bir insansım, bu yüzden düşünmediğim şeyler olabilir.
Minör sözler: siz de Operator' bir 'Constructor' Taşı, insanlar muhtemelen beklemek bir' Taşı Ataması sağlarsanız. Bunu sağlamayı mı planlıyorsunuz yoksa değişmez bir sınıf mı istiyorsunuz? –
Bu özel durumda, immutable olması amaçlanmıştır, bu yüzden atamayı istemiyorum, ama genel olarak iyi bir nokta. – Charlie
btw, derleyici tarafından oluşturulan kopyalama/taşıma işlemleri departmanındaki son değişikliklerle, aslında artık desteksiz olarak türetmek zorunda değilsiniz. Bir hareket edicinin bildirilmesi, derleyicinin başka herhangi bir kopyalama/taşıma işlemi oluşturmasını engelleyecektir, bkz. Http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3203.htm – sellibitze