shared_ptr和use_count

zer*_*int 3 c++ shared-ptr

在以下代码段中:

shared_ptr<int> p;

{
    p = shared_ptr<int>(new int);
    cout<<p.use_count()<<endl;
}

cout<<p.use_count()<<endl;
Run Code Online (Sandbox Code Playgroud)

输出结果是

1
1

我不明白为什么第一个输出是1- 不应该是2

bam*_*s53 8

临时对象的生存期不足以使第一个p.use_count()对象返回2。临时对象首先被销毁,将其所有权放弃给它拥有的任何对象。

此外,由于临时变量是右值,因此对的赋值p将导致移动赋值,这意味着无论如何使用量永远不会为2(假设质量实现)。所有权只是从临时所有权转移到p,永远不能超过1。


dan*_*itz 6

 #include <memory>
 #include <iostream>

 int
 main(int argc, char** argv) {
   std::shared_ptr<int> p(new int);
   std::shared_ptr<int> p2(p);
   std::cout << p.use_count() << std::endl;
   return 0;
 }

output: 2
Run Code Online (Sandbox Code Playgroud)

解释/编辑:在你的来源中,最初的'p'从未拥有任何东西的所有权.在p的第二个引用中,您将分配给临时并基本放弃对'p'的所有权.最有可能的是,移动构造函数用于满足此分配.

编辑:这可能是你想要的?

 #include <memory>
 #include <iostream>

 int
 main(int argc, char** argv) {
   std::shared_ptr<int> p(new int);
   {
       std::shared_ptr<int> p2(p);
       std::cout << p.use_count() << std::endl;
   }
   std::cout << p.use_count() << std::endl;
   return 0;
 }

output: 2
        1
Run Code Online (Sandbox Code Playgroud)