c++ - 如何在现代 C++ 中表达引用关系而不表达所有权?

标签 c++ pointers reference smart-pointers

从“不应该使用原始指针”的习语观点出发,我一直在研究智能指针,以找出最适合引用关系的指针。

通过指代关系,我的意思和这段代码一样:

class A
{
public:

    A(B & b) : 
        m_refB( b ) 
    {   }

private:

    B & m_refB;    // A refers to B
};

但没有使用引用的所有缺点(以后无法绑定(bind),无法重新分配,A 不再是默认可构造的等)。

然而,每个智能指针在其自身语义中都表达了所有权概念。它们甚至围绕这个所有权概念命名(当所有权仅对一个对象唯一时为唯一指针,当所有权在多个对象之间共享时为共享指针等)。

我想表达的是A指的是B,但是A并不拥有B。 可以std::reference_wrapper< B >做这项工作,或者那将是错误的用法?

最佳答案

没有“不应该使用原始指针”这样的东西。它是“不应该使用拥有原始指针”。为 refers-to 习语使用原始指针并没有错。智能指针对此来说只是一种矫枉过正。特别是 std::weak_ptr :)

关于c++ - 如何在现代 C++ 中表达引用关系而不表达所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440157/

相关文章:

c# - 自定义包含 List<ReferenceObject> c#

node.js - 如何使用 Mongoose 将多个引用保存到 MongoDB 中的其他文档?

c++ - 解除引用引用

c++ - 使用 AX_BOOST_BASE 进行 autoconf boost 检测

使用内存地址在不带指针的 C 函数中更改数组

c - 如何理解函数中的指针

C++:如何返回指向非静态成员函数的指针?

C++编译器错误: passing pointers but compiler sees references

c++ - map [] 运算符段错误

c++ - 如何编译wxsqlite3和sqlite以获得加密支持