다음 문제를 이해하도록 도와주세요. 아래의 코드 예제에서auto_ptr 캐스팅 auto_ptr <Base><Derived>
봐 :
나는이 할 수 없습니다입니다 왜#include <iostream>
class Shape {
public:
virtual wchar_t *GetName() { return L"Shape"; }
};
class Circle: public Shape {
public:
wchar_t *GetName() { return L"Circle"; }
double GetRadius() { return 100.; }
};
int wmain() {
using namespace std;
auto_ptr<Shape> aS;
auto_ptr<Circle> aC(new Circle);
aS = aC;
wcout << aS->GetName() << L'\t' << static_cast<auto_ptr<Circle>>(aS)->GetRadius() << endl;
return 0;
}
:
static_cast<auto_ptr<Circle>>(aS)->GetRadius()
컴파일러 (MSVCPP 11) :
'1>c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(911): error C2440: 'initializing' : cannot convert from 'Shape *' to 'Circle *'
1> Cast from base to derived requires dynamic_cast or static_cast
@Truncheon : 의도적으로 _trolling_ 있습니까? 몇 달 후 나는이 느낌이 들지 않았다. 당신의 의견은 "우리가 의견을 줄이면 좋겠다"라는 또 다른 사례이다. – sbi
너무 형편 없기 때문에 의견을 투표 할 수 없습니다.메모리 관리가 포인터를 래핑하는 객체에 의해 처리 될 수 있다고해도 std :: auto_ptrs가 항상 최선의 대안이 아니라는 사실에 나는 당신과 동의한다. 그러면 개발자는 포인터가 매달 리는 것에 대해 생각할 필요없이 자신이 해결하고있는 실제 문제에 집중할 수 있습니다. –
@sbi 우리는 비슷하게 생각합니다. (참고로,이 글을 새로 고치지 않았기 때문에 내 글을 쓸 때 귀하의 코멘트를 보지 못했습니다) –