我正在第三方库(Bar)之上构建一个库(Foo),它需要Initialise()
在任何使用它的程序的开头调用一个自由函数,并在DeInitialise()
最后调用一个函数。我想将这些函数“级联”到我的库中,这样用户就需要初始化我的函数,而无需了解第三方库的初始化。此外,我可以在同一个地方执行我的库可能需要的任何其他初始化。我可以使用我的第三方库的方法使用免费功能,例如:
namespace Foo
{
Initialise()
{
Bar::Initialise();
// Do rest of Foo's initialisation
}
DeInitialise()
{
Bar::DeInitialise();
// Do rest of Foo's de-initialisation
}
}
然后,Foo 的用户将被要求Foo::Initialise
在使用它之前和Foo::DeInitialise
最后调用它,并有责任确保它只被调用一次(这样我就可以避免担心线程安全问题)。
这是我在寻找此问题的解决方案时经常遇到的方法。但是,我现在正在考虑将所有初始化和反初始化放在类的构造函数/析构函数中,例如:
Class Initialiser
{
Initialiser()
{
Bar::Initialise();
// Do rest of Foo's initialisation
}
~Initialiser()
{
Bar::DeInitialise();
// Do rest of Foo's de-initialisation
}
}
因此,用户不必担心去初始化——他们只是Initialiser
在程序开始时在堆栈上创建一个对象,而析构函数将在程序退出时处理其余的事情。
我的问题是:这是一种合理的方法吗?是否有任何潜在的陷阱或替代解决方案需要考虑?拥有一个只有构造函数和析构函数但没有数据成员的类是否有效?