我Initializer
为我的项目创建了一个类,该类在其构造函数中执行初始化并在其析构函数中执行反初始化。我的项目的用户在他的程序开始时在堆栈上创建一个Initializer
对象,确保在超出范围时(例如在程序终止时)进行反初始化:
Class Initialiser
{
Initialiser()
{
// Acquire resources
}
~Initialiser()
{
// Free resources
}
}
我想创建一个单元测试以确保正确进行取消初始化,例如:
bool verifyDeinitialization()
{
// Code to check that no resources are allocated
// Return true if none allocated, false otherwise
}
// Syntax below is for UnitTest++:
TEST(Initializer_Destructor_DeinitializationWorks)
{
{
Initializer init; // Will this be optimized away?
} // init goes out of scope, destructor called
CHECK(verifyDeinitialization())
}
我的问题是——如果析构函数通过释放它获取的所有资源来完全反转构造函数的效果,编译器会检测到没有发生任何可观察的事情,并优化掉init
对象吗?我担心我的单元测试可能会提供一个假阴性(当它可能失败时通过测试),因为正确的取消初始化等同于初始化从未发生过(在这两种情况下,都有没有已获取的资源)。