我测试 unique_ptr<> 如下
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
virtual ~A() {}
virtual void print()
{
cout << "A::Print()" << endl;
}
};
class B : public A
{
public:
virtual ~B() {}
virtual void print()
{
cout << "B::Print()" << endl;
}
};
int main()
{
A a;
B b;
A* arr[2] = {&a, &b};
arr[0]->print();
arr[1]->print();
unique_ptr<A*[]> ptr(move(arr));
/*
unique_ptr<A*[]> ptr(new A*[2]{&a, &b});
*/
ptr[0]->print();
ptr[1]->print();
return 0;
}
它得到类似 (g++ 4.7.3) 的结果
A::Print()
B::Print()
A::Print()
B::Print()
Aborted (core dumped)
看起来ptr
andarr
指向相同的东西,当调用析构函数时,它已被删除两次。
为什么移动语义在这里不起作用?
它不适合数组还是与unique_ptr有关?