Say*_*yan 3 c++ temporary-objects
在这里,当我推入堆栈时,为什么对象会被销毁?
#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";
}
Run Code Online (Sandbox Code Playgroud)
我之前预计不会看到任何输出Now I'll stop。但我明白了
value 1 is destroyed
value 2 is destroyed
Now I'll stop
value 1 is destroyed
value 2 is destroyed
Run Code Online (Sandbox Code Playgroud)
如果我想防止它们被破坏,我该怎么办?
son*_*yao 12
One(1)并One(2)构造两个临时对象,将它们传递给push然后复制(移动)到stack. 临时表在完整表达式后立即销毁。
如果您想避免构建临时文件,您可以emplace改用。
将新元素压入堆栈顶部。该元素是就地构造的,即不执行复制或移动操作。
例如
stack.emplace(1);
stack.emplace(2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |