所以我只运行了一个简单的示例,可以使用一些帮助来了解发生了什么
我运行带有变量“ RandomNumber”的测试,输出为
Construct
Invoke
Destruct
所以我再次运行测试,但未注释变量“ RandomNumber”,输出为
Construct
Destruct
Invoke
我尝试了很多次,但结果相同,但我真的不明白为什么变量会改变测试仪的寿命...测试:
struct Container
{
template<typename T>
Container(T&& O) : Data((void*)std::addressof(O)) {}
private:
void* Data;
//std::weak_ptr<int> RandomNumber;
};
struct Tester
{
Tester() { std::cout << "Construct" << std::endl; }
~Tester() { std::cout << "Destruct" << std::endl; }
};
void TestFunction1(const std::vector<Container>& Data)
{
std::cout << "Invoke" << std::endl;
}
int main()
{
TestFunction1({ Tester() });
return 0;
}
在Windows 10上多次运行该代码后,我观察到无论是否注释weak_ptr<int> RandomNumber
,它都会产生几乎相同的输出:
Construct
Invoke
Destruct
这意味着输出结果在系统中会有所不同,因为其他联机编译器产生的结果与您相同。最可能的原因是输出取决于系统/编译器,并且编译器执行不同的优化。