我想获得以下安装正确的调用顺序:如何执行析构函数
一个给定的应用程序(具有多个源文件,编译单元)在许多编译单元定义class A
类型的全局变量。 这些应该由一个新的“管理”来引入class B
(其中只有一个实例应该存在),这是因为在创建时它们在B类的实例处“注册”它们并且在销毁“签出”时注册它们自己。
设置构造函数的工作是相当直接的。人们可以使用:
types.h
:
class B {
static B& Instance() {
static B singleton;
return singleton;
}
void registerA(const A& a) {
// whatever
}
};
class A {
A() { B::Instance().registerA(this); }
};
如何获得的析构函数吗?如果使用:
class A {
A() { B::Instance().registerA(this); }
~A() { B::Instance().signoffA(this); }
};
那么B
析构函数可能是A
析构函数之前调用。 然后,A
类的实例在B
刚创建的实例中签发。
测试用例将在一个命名空间的多源文件设置为class A
情况下的定义:
file1.cc
#include "types.h"
namespace C {
A a;
}
file2.cc
#include "types.h"
namespace C {
A b;
}
我想上能做到如此用Boost智能指针很容易。但是,如果可能的话,我想避免使用额外的库来保持尽可能低的依赖性。
有一件事可能会有所帮助:所有全局变量都位于命名的命名空间中。
请修复您的缩进和范围界定。 –
另外,请考虑创建一个简短的连贯测试用例来说明您的'A'实例是否与其他一切相关。目前有点令人困惑。 –
请注意,'register'是C++和C中的关键字,因此您的代码无法编译。 –