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