从“不应该使用原始指针”的习语观点出发,我一直在研究智能指针,以找出最适合引用关系的指针。
通过指代关系,我的意思和这段代码一样:
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/