【发布时间】:2017-08-11 09:20:50
【问题描述】:
我无法弄清楚 Android 框架(在 C++ 中)的以下区别
class foo {
...
}
class child_foo : public foo {
...
}
sp<child_foo> item = new child_foo;
const sp<foo> &r1 = item;
那么item的强计数是2。
但是,如果它在
sp<child_foo> item = new child_foo;
const sp<child_foo> &r1 = item;
那么item的强计数是1。
它们有什么区别?
我还注意到const sp<foo> &r2 = item; 会调用 sp's(original typo of foo's) 构造函数,为什么?
在这里修复,不是 foo 的构造函数,而是 sp(强指针)。
提前致谢!
【问题讨论】:
-
对智能指针的引用不会增加智能指针的引用计数。您只需为智能指针创建一个别名(第二个示例)。不确定为什么调用 foo 的构造函数。我猜你在这里混淆了,因为如果在第一个例子中创建了一个新的 foo 对象并且引用计数增加了,那就很奇怪了。
标签: android c++ pointers smart-pointers