【发布时间】:2013-09-04 11:27:46
【问题描述】:
我测试 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 和 arr 似乎指向同一个东西,并且在调用时
析构函数,已经被删除了两次。
为什么移动语义在这里不生效?
是不适合数组还是和unique_ptr有关?
【问题讨论】:
-
另一个人至少应该得到一个紫外线,他在技术上首先回答:)
标签: arrays c++11 move-semantics unique-ptr