Thomas Becker's "C++ Rvalue References" okumayı bitirdim. Rvalues ve Rvalue referansları hakkında birkaç sorum var. AyrıcaTüretilmiş sınıflar, bir temel sağladığında taşıma semantiği uygulamak gerekir mi?
template <class T>
MyArray
{
...
T* m_ptr; // Pointer to elements
size_t m_count; // Count of elements
};
sağladığı varsayalım: Basit dizi sınıf var
varsayalım varsayalım
#if(__cplusplus >= 201103L)
MyArray(MyArray&& t)
: m_ptr(std::move(t.m_ptr)), m_count(std::move(t.m_count))
{
t.m_ptr = NULL;
t.m_count = 0;
}
MyArray operator=(MyArray&& t)
{
std::swap(*this, t);
return *this;
}
#endif
Şimdi var değil yeni veri üye eklemek yapan bir türetilmiş sınıf:
nedir??
MyImprovedArray(MyImprovedArray&&)
ve MyImprovedArray& operator=(MyImprovedArray&&)
'a da ihtiyaç var mı? Eğer öyleyse, sadece std::move
taban sınıfını gerçekleştirmeli mi? Yoksa std::swap
'u da yapması gerekiyor mu?
MyImprovedArray(MyImprovedArray&& t)
: MyArray(t)
{
}
Şüphesiz, yine de 'MyImprovedArray (MyImprovedArray &&) = default' ' – Jarod42
yapabilirsiniz. Sanal bir tabanınız olmadığı sürece, varsayılan değerler iyidir. Bir sanal tabana sahipseniz, [kopyalama/taşıma atamaları operatörünüze bir göz atmanız gerekebilir] (http://stackoverflow.com/questions/17252869/danger-with-virtual-base-move-assignment-operators- zaman-onlar-şimdi-izin verilir-kadar). –