【发布时间】:2008-12-29 20:55:58
【问题描述】:
我有一个工厂,可以在我的应用程序中构建生命周期最长的对象。它们有类型,比如说ClientA 和ClientB,它们依赖于Provider(具有许多可能实现的抽象类),因此两个客户端都引用了Provider 作为成员。
根据命令行参数,工厂选择Provider 的一种实现,构造它(使用“new”),并将其传递给两个客户端的构造函数。
工厂返回一个代表我的整个应用程序的对象。我的主要功能基本上是这样的:
int main(int argc, char** argv)
{
AppFactory factory(argc, argv);
App app = factory.buildApp();
return app.run();
}
而buildApp的方法基本上是这样的:
App AppFactory::buildApp()
{
Provider* provider = NULL;
if (some condition)
{
provider = new ProviderX();
}
else
{
provider = new ProviderY();
}
ClientA clientA(*provider);
ClientB clientB(*provider);
App app(clientA, clientB);
return app;
}
所以,当执行结束时,所有对象的析构函数都会被调用,除了提供者对象(因为它是用“new”构造的)。
如何改进此设计以确保调用提供程序的析构函数?
编辑:澄清一下,我的意图是客户端、提供者和 App 对象共享相同的生命周期。在所有答案之后,我现在认为客户端和提供者都应该在堆上分配其传递给 App 对象的引用,该对象将负责在它死时删除它们。你说什么?
【问题讨论】:
标签: c++ design-patterns factory