gpt4 book ai didi

c++ - 为什么在函数内部初始化时 C++ 对象会被破坏?我能做些什么来防止它?

转载 作者:行者123 更新时间:2023-12-04 14:30:46 25 4
gpt4 key购买 nike

在这里,当我插入堆栈时,为什么对象会被销毁?

#include <iostream>
#include <stack>

class One
{
private:
int i;
public:
One(int i) {this->i = i;}
~One() {std::cout << "value " << this->i << " is destroyed\n";}
};

int main()
{
std::stack<One> stack;
stack.push(One(1));
stack.push(One(2));

std::cout << "Now I'll stop\n";
}
我预计在 Now I'll stop 之前看不到任何输出.但我明白了
value 1 is destroyed
value 2 is destroyed
Now I'll stop
value 1 is destroyed
value 2 is destroyed
如果我想防止它们被破坏,我该怎么办?

最佳答案

One(1)One(2)构造两个临时对象,传递给 push然后复制(移动)到 stack .临时表在完整表达式后立即销毁。
如果你想避免构建临时文件,你可以使用 emplace 反而。

Pushes a new element on top of the stack. The element is constructed in-place, i.e. no copy or move operations are performed.


例如。
stack.emplace(1);
stack.emplace(2);

关于c++ - 为什么在函数内部初始化时 C++ 对象会被破坏?我能做些什么来防止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68374227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com