共享指针和const正确性

nya*_*108 8 c++ getter const-correctness shared-ptr

将类的const正确性扩展到其尖头成员的正确方法是什么?在示例代码中,get方法的常量版本是否会创建一个std::shared_ptr其引用计数器与内部成员相同m_b,或者是否重新开始计数0

class A
{
    std::shared_ptr< B > m_b;

public:

    std::shared_ptr< const B > get_b( ) const
    {
        return m_b;
    }

    std::shared_ptr< B > get_b( )
    {
        return m_b;
    }
}
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 7

shared_ptr当你从另一个构建时,它将始终保留引用计数shared_ptr; 不安全地使用它的唯一方法是从原始指针构造:shared_ptr<...>(my_ptr.get()) // don't do this.

您可能也对propagate_const包装器感兴趣,它位于Library Fundamentals TS v2中,因此可能很快就会在您的实现中提供.