我有一个工厂,可以在我的应用程序中构建生命周期最长的对象。比如说,它们具有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 对象的引用,该对象将负责在它死时删除它们。你说什么?