交换两个s的内容时shared_ptr,只交换内容。当在shared_ptr交换之前从另一个副本创建一个副本时,我很惊讶新shared_ptr副本的内容保持不变。
这是一个例子:
std::shared_ptr<int> foo (new int(10));
std::shared_ptr<int> bar (new int(20));
auto abc = foo;
std::swap (foo, bar);
std::cout << "foo: " << *foo << '\n';
std::cout << "bar: " << *bar << '\n';
std::cout << "abc: " << *abc << '\n';
Run Code Online (Sandbox Code Playgroud)
它打印:
foo: 20
bar: 10
abc: 10
Run Code Online (Sandbox Code Playgroud)
abc在这种情况下为什么不是20?鉴于它是 的副本foo。