※ 引述《Caesar08 (Caesar)》之铭言:
: #include<algorithm>
: #include<vector>
: using namespace std;
: class A
: {
: vector<int*> vec;
: public:
: A(){}
: A& operator=(A &&rVal)
: {
: if(this!=&rVal)
: {
: this->~A();
: vec=move(rVal.vec);
: }
: return *this;
: }
: ~A()
: {
: for_each(vec.begin(),vec.end(),[](int* &val){delete val;});
: }
: };
: int main()
: {
: A a;
: a=A();
: }
除了copy assigment可以用copy and swap idiom,
move assignment也可以用。
A::A(const A &rhs)
: vec()
{
vec.reverse(rhs.vec.size());
for (auto &val : rhs.vec)
{
vec.push_back(new int(*val));
}
}
A::A(A &&rhs) noexcept
: vec(std::move(rhs.vec))
{
}
A& A::operator=(A rhs)
{
swap(rhs);
return *this;
}
void A::swap(A &rhs) noexcept
{
std::swap(vec, rhs.vec);
}