2011-01-01 27 views
5

C++ 0x'de, bazı sınıfların kopyalanıp taşınamayacağı yasal/yasal mıdır? Yeniden boyutlandıran heterojen bir sınıfı uygulamaya çalışıyorum ve bazı sınıfların kopyalanmasına ihtiyaç duyması ve bazılarının hareket etmesi gerekiyorsa, bunun üstesinden gelebileceğime emin değilim.Kopyalayın, ancak hareket etmeyin

cevap

5

Evet, yasal. C++ kodlayıcıları (benim gibi!) Bilmek olsa da, bunun olabileceğini tahmin etmelisiniz.

Merak etme, bir sınıfa kopabilir ancak hareket edemezse ne tür bir güvene dayanıyorsunuz?

+0

Yeniden boyutlandıran heterojen bir yığın. Minimum çaba ile C++ 03 uyumluluğunu istersem, her ikisine de izin vermeliyim. – Puppy

+1

Hmm ... özel olarak kopyalanabilir, bozucu (bu mantıklı bir terim bu mu?) Nesneleri ile kırılan kodda ne var? Daha önce hiç karşılaşmadığım için merak ediyorum. – templatetypedef

+0

Bunu söylediğin iyi bir şey. Bazı nedenlerden dolayı, taşınan nesnelerin tahrip edilmesine gerek olmadığını aklımda tutuyordum. Whoops. – Puppy

0

Taşıma kurucusunun korumalı/özel olmasını sağlamanın, bu sınıfın nesnelerini taşıma yeteneğini sınırlamanın bir yolu olduğundan eminim. Bunu bir şablonda beklerseniz? Ben öyle düşünmüyorum. Bu tür bir kontrol için std::enable_if'a ihtiyacınız var.

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

Ancak, herkes bu yapmak isteyeyim neden olarak iyi bir neden düşünemiyorum: Bir sınıf copyable ama hareketli olmamak için

İlgili konular