你说得对。不是 weak_ptr<> 的语义,改叫 unsafe_ptr<> 好了。跟 shared_ptr<> 一样,编译器仍然自动地操作引用计数,但是程序员要自己处理循环引用。像本例里面,不会真的发生循环引用,所以程序员其实什么都不用做。
unsafe<ptr> p1;
shared_ptr<> p2 = p1; // ++ref,由编译器自动调用
p1.release(); // --ref,不调用析构,手动处理循环引用。
但仍然需要用 weak_ptr<> 定义指向父节点的指针:
struct TreeNode {
weak_ptr<TreeNode> parent;
list<unsafe_ptr<TreeNode>> children;
};
【 在 ilovecpp (cpp) 的大作中提到: 】
: 没有shared_ptr你从哪儿凭空变出来的weak_ptr?
--
FROM 183.250.222.*