Ita*_*iwa 4 c++ shared-ptr c++11
在C ++入门5版中。std::shared_ptr据说第十二章:
p = q;
Run Code Online (Sandbox Code Playgroud)
“ p并且q是shared_ptr可以互相转换的保持指针。如果's'的计数变为0,则减少p's的引用计数并增加q's的计数,删除p's现有的内存p。
所以我尝试了这个:
std::shared_ptr<int> sp1 = std::make_shared<int>(10);
decltype(sp1) sp2 = nullptr;
std::cout << sp1.use_count() << std::endl;
std::cout << sp2.use_count() << std::endl;
sp2 = sp1;
std::cout << sp1.use_count() << std::endl;
std::cout << sp2.use_count() << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
sp1.use_count(): 1
sp2.use_count(): 0
sp1.use_count(): 2
sp2.use_count(): 2
Run Code Online (Sandbox Code Playgroud)
为什么sp1和sp2具有相同use_count?上面说过,赋值递减p的参考计数和增量q的计数?
此外,我不知道这种情况下可能是潜在的三分球sp1和sp2比是相同的类型转换为彼此其他:
std::shared_ptr<int> spi = std::make_shared<int>(0);
std::shared_ptr<short> sps = spi; // error
Run Code Online (Sandbox Code Playgroud)我认为short可以转换为,int但为什么不起作用?众所周知,它类似于容器:容器类型(类型名称和元素类型)必须相同。然后,我在书中没有明白这一点:“ p和q是shared_ptr保持可相互转换的指针。”
为什么sp1和sp2具有相同的use_count?
您有两个共享的指针sp1和sp2指向同一资源。
因此,两个共享指针均指示资源的“使用计数”为2。
上面说过,赋值递减p的参考计数并递增q的计数?
如果p最初指向其他东西,它会做。现在,您将少一个指向该其他资源的共享指针。
我认为[
int]可以转换为[short],但为什么不起作用?
是的,int可以将转换为short。也就是说,您可以采用int并创建一个short具有相同值的新值(如果它在类型范围内)。
但是a short不是int,因此,如果有int,则不能使用a short*指向它。
这与共享指针无关。试一试:
int x = 0;
short* y = &x;
Run Code Online (Sandbox Code Playgroud)
并且您会看到您无法拥有它,也没有任何意义。
我可能知道它类似于容器:容器类型(类型名称和元素类型)必须相同
不,与它无关。
我在书中没有明白这一点:“ p和q是shared_ptrs,它们持有可以相互转换的指针。”
有些指针是可转换的,例如Derived*to Base*。
他的意思是,“在此示例中,假设p和q均为shared_ptrs,或者是完全相同的类型,或者至少是可转换类型的,所以=合法”。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |