PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 交互friend以及智能指针的问题
楼主:
Caesar08
(Caesar)
2014-06-08 20:13:17
问题(Question):
第一个问题
http://ideone.com/VhOgRi
我想让两个class的constructor互相为friend
但我不想使用我注解起来的地方
第二个问题
比较这两份code
http://ideone.com/3JPtDg
http://ideone.com/ylRrpl
为什么shared_ptr能做得到呢?
(主要原因是因为我的code是用pimpl去写的,后来要改成unique_ptr时就发现错误了)
作者:
Jockey66666
(往事已成追忆)
2014-06-08 20:27:00
unique_ptr在compile time需要知道destructor定义
http://en.cppreference.com/w/cpp/memory/unique_ptr
楼主:
Caesar08
(Caesar)
2014-06-08 20:43:00
我看完了,可是我没办法理解,为什么他需要deleter?我到是找到了这个,
http://ppt.cc/l8h~
作者:
Jockey66666
(往事已成追忆)
2014-06-08 21:32:00
可参考
http://ppt.cc/73gO
的写法
作者: firose (guest也是也是也是也是也)
2014-06-09 11:14:00
连结只说跟 dynamic/static deleter 差异有关 也不是很清楚
楼主:
Caesar08
(Caesar)
2014-06-09 21:19:00
感谢firose,不过文章好长= =...
作者: firose (guest也是也是也是也是也)
2014-06-09 22:46:00
其实我后来看还是不太懂, 结果又研究了一下, 有些想法:主要是这两个类别的 ctor、dtor 实作不太一样, shared_ptr无参数建构子不做事, 只把一个参用计数的指标出使为 0它是 sp_counted_base, 然后解构子呼叫它的 release 这个函数, 不会依赖 T 所以不对它要求 complete typeunique_ptr 的 dtor 会去呼叫 default-deleter上面 J 大贴的连结中有说明 delete 一个没有 dtor 的型别会编译过关, 但是会有 undefined behavior 所以它的实作用sizeof 来达到编译错误, 提醒使用者不能有 incomplete type那连结也指出如果呼叫 shared_ptr(T*) 这个版本会需要完整定义, 但是我们没呼叫这版本, 而根据 template 特性, 没呼叫到就不会具现化, 所以没有问题剩下问题就是为什么 unique_ptr 的解构式会被需要? 上面讨论的论坛联结都有说到
作者:
Jockey66666
(往事已成追忆)
2014-06-09 23:58:00
针对dynamic/static deleter给一个小小例子
http://ideone.com/egf9ip
unique_ptr 版本
http://ideone.com/sF0qB5
shared_ptr版本我destructor刻意不加上virtual可是shared_ptr会呼叫到derived,这就是dynamic结论:能用unique_ptr就尽量用unique_ptr比较有效率 :)
继续阅读
[问题] C++/CLI 事件如何传参数给事件?
deo2000
[问题] BCB程式问题
archer123
[问题] 请问为什么我这样程式会当掉
ga544523
[问题] C++运算子重载和继承合用,会导致混乱
frankhsu421
[问题] 关于CRecordset::GetFieldValue问题
klyhate
[问题] 是否执行上次成功专案?
discipile
[问题] 删除字串特定符号
hyhjcjy
[问题] mfc CDialog影响socket (udp)接收
kaijajan
[问题] 装置管理员
getaway
[问题] 如何在BCB操控Excel(非使用OLE方式)?
bluestar8783
Links
booklink
Contact Us: admin [ a t ] ucptt.com