5
由於某種原因,我正在考慮在一些函數(方法)中實現接口作爲本地類。將抽象類實現爲本地類?優點和缺點
考慮以下幾點:
class A{
public:
virtual void MethodToOverride() = 0;
};
A * GetPtrToAImplementation(){
class B : public A {
public:
B(){}
~B(){}
void MethodToOverride() {
//do something
}
};
return static_cast<A *>(new B());
}
int _tmain(int argc, _TCHAR* argv[])
{
A * aInst = GetPtrToAImplementation();
aInst->MethodToOverride();
delete aInst;
return 0;
}
我爲什麼這樣做的原因是:
- 我很懶在單獨的文件
- MethodToOverride只是代表呼籲實現類(B)到其他類
- B類不應該對其他用戶可見
- 不需要擔心ab刪除aInst,因爲智能指針用於實際執行
所以我的問題是,如果我這樣做的權利?
在此先感謝!
爲什麼不能在'A'的實現文件中完全定義'B'(非本地)? – 2010-03-17 14:11:07
只是一個挑逗,但A應該有一個虛擬析構函數 – jpalecek 2010-03-17 14:11:21
A只是一個接口 - 在頭文件中聲明。另外,在定義GetPtrToAImplementation的翻譯單元之外,B不可見。 – sinek 2010-03-17 14:17:45