class ClassOne : boost::noncopyable
{
};
class ClassTwo : boost::noncopyable
{
public:
ClassTwo(const ClassOne& one)
: m_one ( one ) {}
private:
const ClassOne& m_one;
};
class ClassThree : private boost::noncopyable
{
public:
ClassThree(boost::shared_ptr<const ClassOne> one)
: m_one ( one ) {}
private:
boost::shared_ptr<const ClassOne> m_one;
};
class ClassFour : private boost::noncopyable
{
public:
ClassFour(const boost::shared_ptr<const ClassOne>& one)
: m_one ( one ) {}
private:
boost::shared_ptr<const ClassOne> m_one;
};
Run Code Online (Sandbox Code Playgroud)
问题>在代码查看期间,我被告知代码(类似ClassTwo)应该被代码替换(类似ClassThree),因为将const引用存储到外部类是不安全的.
真的吗?
谢谢
Const参考和shared_ptr模型有两个相似但不同的概念.
如果你有一个const引用,你"知道"某些东西,你可以检查这个东西(通过const方法),但你不能改变这个东西,更重要的是,这个东西可能随时消失:你不拥有它.
另一方面,shared_ptr模拟共享所有权.您拥有指针指向的对象.你可以改变它,它不会被破坏,除非每个主人都被毁坏.
将const引用返回给私有成员是安全的; 接受这样的参考是另一回事.您必须确保引用仍然有效.
shared_ptr 更容易处理,但它是一个更昂贵的解决方案.
关于确切的动态,请阅读手册shared_ptr