次のように 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
、デストラクタを呼び出すと、2回削除されました。
ここで移動セマンティックが有効にならないのはなぜですか?
配列には不向きですか、それともunique_ptrについてですか?