花开自有丶花落 发表于 2017-8-1 17:15:22

static_pointer_cast的奇怪事

本帖最后由 花开自有丶花落 于 2017-8-1 17:45 编辑

在c++标准库第二版第95页有这样几行代码

shared_ptr<void>sp(new int);
shared_ptr<int>(static_cast<int*>(sp.get()));语义是错误的,因为引用次数没有共享,所有被销毁俩次
static_pointer_cast<int*>(sp);
就是这一行,书上原句类型就是int*,但是我发现和上面语义不同啊,呐,上面讲原始指针转为int*作为shared_ptr的初值
shared_ptr<int> sp2 = static_pointer_cast<int*>(sp);
在VS2017这样的语句确实是红线的
然后发生更有意思的事,明明是不同的类型(一个是shared_ptr<int>,一个是一个是shared_ptr<int*>),却是同一个引用次数(具体请看图)?是我哪没理解到还是啥emmm?

花开自有丶花落 发表于 2017-8-1 17:25:42

有人撒子?

花开自有丶花落 发表于 2017-8-1 17:46:51

刚刚突然觉得仿佛失了智,sp2类型后的use_count是sp1调用的,但是改了之后还是{:10_247:}

花开自有丶花落 发表于 2017-8-2 10:11:35

居然木有人回

花开自有丶花落 发表于 2017-8-3 10:36:29

昨天梦到有人给我回帖了,然并卵{:10_269:}

花开自有丶花落 发表于 2017-8-4 08:21:38

emm?
页: [1]
查看完整版本: static_pointer_cast的奇怪事