我知道weak_ptr是避免循环引用的好方法。
但是,我不确定是否应该尽可能使用它来提高性能,例如仅在读取指针中的内容时。
例如,我有一个存储智能指针的向量:
typedef shared_ptr<MyClass> MyClassPtr;
vector<MyClassPtr> v;
v.push_back(..);
...
我有一个功能来搜索一个项目并打印出来。
void foo(vector<MyClassPtr> &v) {
// find and get an item at i
MyClassPtr ptr = v[i]; // <-- Do I really need to increase reference count here?
// I just want to print out the item's content.
ptr->print();
}
在这种情况下使用weak_ptr会更好吗?有什么我应该注意的陷阱吗?