gpt4 book ai didi

c++ - 有人可以解释这个 unique_ptr 代码发生了什么吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:20 26 4
gpt4 key购买 nike

这是一段使用unique_ptr的代码:

struct Foo{
Foo(){std::cout << "Ctor called\n";}
~Foo(){std::cout << "Dtor called\n";}
void bar(){std::cout << "bar called\n";}
}

int main(){
unique_ptr<Foo> up(new Foo);
{
vector<unique_ptr<Foo>> v;
v.push_back(move(up));
}

up->bar();
return 0;
}

运行的输出是:

Ctor called
Dtor called
bar called

我原以为对 bar() 的调用会失败,因为据我所知,up 应该被 v 销毁,因为移动ing。看来我没有理解正确。有人可以引导我了解正在发生的事情吗? (g++ 4.7.0)

最佳答案

您看到的是 未定义的行为,由上次调用 up->bar() 引起。如果您尝试,它可能是相同的:

static_cast<Foo*>(0)->bar();

请注意,未定义的行为实际上意味着未定义,因此它可能会崩溃或完全出乎意料,比如看起来工作正常。编译器还可以理解永远不会到达最后一行代码(在定义的行为下),并决定生成一个什么都不做的空可执行文件。

关于c++ - 有人可以解释这个 unique_ptr 代码发生了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11167374/

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