取消引用指针会使代码很难阅读。我通常做的是引用指向的对象并使用该引用。例子:

shared_ptr<std::vector<int> > sp = get_sp_to_vector();
std::vector<int>& vec = *sp;
...
vec.push_back(5);

我想知道这是否是一个好习惯。它有什么缺点吗?

更新: 为了完成这个例子,我会用以下方式定义 get_sp_to_vector():
shared_ptr<std::vector<int> >  get_sp_to_vector()
{
    // create a vector and send back a shared pointer pointing at it
    shared_ptr<std::vector<int> >  sp(new std::vector<int>);
    sp->push_back(1);  sp->push_back(3);
    return sp;
}

最佳答案

使用局部引用很常见,尤其是在循环体内部,但有一个要求:仅当引用显然与目标对象一样长时才使用。

这通常不难保证,但这里有一些不好的例子:

shared_ptr<X> p = get_p();
X& r = *p;
p.reset(); // might result in destroying r
use(r); // oops

// or:
shared_ptr<X> p = get_p();
X& r = *p;
p = get_some_other_p(); // might result in destroying r
use(r); // oops

关于c++ - 对指向对象的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2098820/

10-13 05:44