改变输出的变量

A Variable changing the output

所以我只是 运行 一个简单的例子,可以帮助理解发生了什么

我 运行 对变量 "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

这意味着系统的输出不同,因为其他在线编译器产生了与您相同的结果。最可能的原因是输出是 system/compiler 依赖的以及编译器进行的不同优化。

在对多种配置进行测试后,结果因系统和编译器而异。因此,很难预测结果会是什么。