请帮我理解下面的问题。cast auto_ptr <Base> to auto_ptr <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 2011-12-20 10:44:01
太糟糕了,你不能向下投票评论..我同意你这样一个事实,即std :: auto_ptrs并不总是最好的选择,尽管如果内存管理可以通过包装指针的对象来处理,我并没有发现任何错误。然后开发人员可能会关注他正在解决的实际问题,而不必考虑悬挂指针等。 – 2011-12-20 10:45:28
@sbi我们认为一样..(注意,我没有看到您的意见,因为我没有刷新这个线程时,我没有看到您的意见) – 2011-12-20 10:48:12