#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;
}
그것은
A::Print()
B::Print()
A::Print()
B::Print()
Aborted (core dumped)
는 그것은 ptr
및 arr
samething을 가리킨 때 호출 처럼 보일 (g ++ 4.7.3)과 같은 결과를 얻을 수에 따라 같은 unique_ptr <>을 테스트 소멸자, 그것은 두 번 삭제되었습니다.
왜 여기에 이동 의미가 적용되지 않습니까?
배열에 맞지 않거나 unique_ptr에 관한 것입니까?
을 달성하기 위해 노력하고 무엇을 말할 수있는 테스트로이 만들어 추측하고있어 C 스타일 배열의
std::array<A,2>
, 그는 기술적으로 먼저 대답했다 :) – aaronman