更改输出的变量

问题描述 投票:1回答:1

所以我只运行了一个简单的示例,可以使用一些帮助来了解发生了什么

我运行带有变量“ 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;
}

c++ smart-pointers
1个回答
0
投票

在Windows 10上多次运行该代码后,我观察到无论是否注释weak_ptr<int> RandomNumber,它都会产生几乎相同的输出:

Construct
Invoke
Destruct

这意味着输出结果在系统中会有所不同,因为其他联机编译器产生的结果与您相同。最可能的原因是输出取决于系统/编译器,并且编译器执行不同的优化。

© www.soinside.com 2019 - 2024. All rights reserved.