ste*_*fen 3 c++ shared-ptr unique-ptr c++11
我遇到了一个奇怪的段错误.原因实际上导致我一个错误,但我仍然不明白为什么在这里引起分段错误......代码是:
#include <memory>
int main(int argc, char **arv)
{
int *i = new int;
std::unique_ptr<int> u1(i);
std::unique_ptr<int> u2;
u1 = std::move(u2); // line 7
std::shared_ptr<int> s1(i); // line 8
std::shared_ptr<int> s2;
s2 = s1;
}
Run Code Online (Sandbox Code Playgroud)
我使用g ++ 4.6编译-std=c++0x
并获得段错误.
如果我将第7行更改为u2 = std::move(u1);
(那是错误),它就会消失.如果我将第8行更改为std::shared_ptr<int> s1(new int(3));
(当然我不想要),它也会消失.如果我从第8行删除也没有段错误.
所以没有伤害,但我不明白为什么会有段错误.据我所知,
在第7行,一个空指针被分配给u1.没有重置(),没有范围的结束.然而i
,从那以后似乎无效.是有意的吗?这意味着在移动指针时必须非常小心,因为另一个对象可能被破坏!
你怎么看?我如何保护自己免受这种伤害?
谢谢,斯蒂芬
Ker*_* SB 10
你的第8行是错误的:一旦你捕获i
了unique_ptr
,你就不能再把它交给其他一些所有权对象了!每个所有者都会尝试删除*i
,这是错误的.
相反,您应该从唯一指针创建共享指针:
std::shared_ptr<int> s1(std::move(u2));
Run Code Online (Sandbox Code Playgroud)
(此外,你必须u1
和u2
南辕北辙.)
归档时间: |
|
查看次数: |
4508 次 |
最近记录: |