相关疑难解决方法(0)

我应该更喜欢会员数据中的指针或引用吗?

这是一个简化的例子来说明这个问题:

class A {};

class B
{
    B(A& a) : a(a) {}
    A& a;
};

class C
{
    C() : b(a) {} 
    A a;
    B b; 
};
Run Code Online (Sandbox Code Playgroud)

因此B负责更新C的一部分.我通过lint运行代码并且它围绕引用成员发出错误:lint#1725.这谈到了对默认副本和分配的关注,这是公平的,但默认的副本和赋值也很糟糕,所以那里没有什么优势.

我总是尽量使用引用,因为裸指针不确定地引入了谁负责删除指针.我更喜欢按值嵌入对象,但如果我需要一个指针,我在拥有指针的类的成员数据中使用auto_ptr,并将对象作为引用传递.

当指针可能为null或可能更改时,我通常只在成员数据中使用指针.有没有其他理由更喜欢指向数据成员的引用?

是否真的可以说包含引用的对象不应该是可赋值的,因为初始化后不应更改引用?

c++ reference class-members

126
推荐指数
6
解决办法
9万
查看次数

在*现代* C++中,我应该如何管理*无主*指针?

现代C++ 中,我应该如何管理无主指针?我在想像weak_ptrfor 之类的东西unique_ptr,但这似乎不存在。

例子

例如,如果我有一个A拥有指针的类,我应该使用unique_ptr<X>而不是旧X*指针,例如

class A
{
    std::unique_ptr<X> _myX;
};
Run Code Online (Sandbox Code Playgroud)

但是如果我有另一个B使用这个指针的类,我在这里做什么?使用 C 风格的指针,我会这样做:

class B
{
    X* _someX;
};
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的,但从代码中看不出我引用了另一个对象的指针(例如,读者可能认为我可能没有使用智能指针)。

我考虑了以下几点

  • std::shared_ptr<X>- 似乎是浪费引用计数,因为A它保证比B.
  • std::weak_ptr<X> - 仅适用于 shared_ptr
  • X& - 仅当 X& 在 B 的构造函数中可用时才有效

这似乎是一个明显的问题,如果之前有人问过,很抱歉。我环顾四周,看到了这个问题,但不幸的是,在一个特定情况下,OP 询问“是否可以使用 X*”。我正在寻找我通常应该做的事情而不是X*,(如果有的话!)。

c++ smart-pointers

3
推荐指数
1
解决办法
201
查看次数

标签 统计

c++ ×2

class-members ×1

reference ×1

smart-pointers ×1