請幫我理解下面的問題。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