作为一名对rvalue引用和移动语义不太熟悉的人,我试图从std::vector
中派生一个简单的模板类(我保证我会小心虚拟析构函数的缺失)。为了“继承”移动构造函数,我只需调用基类的构造函数和std::move
即可。
template <typename T>
class Vec: public std::vector<T> {
public:
...
//move ctors
Vec(Vec&& v): std::vector<T>(v) { //move extra members with std::move }
explicit Vec(std::vector<T>&& v): std::vector<T>(v) { //same as above }
...
};
根据我对C ++的理解,这似乎是可靠的。但是,我对移动赋值运算符的方法信心要少得多。
//assignment
Vec& operator=(const Vec& v) {
std::vector<T>::operator=(v);
if (&v != this)
//copy extra members
return *this;
}
//move assignment
Vec& operator=(Vec&& v) {
std::vector<T>::operator=(v);
//move extra members with std::move
return *this;
}
这是实现我想要的一种万无一失的方法吗?在良好实践方面,有更好的替代方案吗?
=default
和=delete
。 - Barry