【问题标题】:Dereferencing a shared pointer and assigning to it取消引用共享指针并分配给它
【发布时间】:2018-12-08 03:58:12
【问题描述】:

是否可以像这样取消引用共享指针,为其分配和分配一个新对象:

void foo()
{
    std::shared_ptr<std::string> x =
            std::make_shared<std::string>();

    bar(*x); // is this fine?
    // x == bsl::string("WHATEVER")
}

void bar(string& y)
{
    y = string("whatever");
}

【问题讨论】:

  • 你正在对指针管理的对象进行更改(你没有让它管理一个新对象)
  • 是的,那么上面的代码是安全的吗?我最终不会修改临时或类似的东西吗?
  • 是的,这一切都很好
  • 顺便说一句,请考虑更多地使用auto。重复容易出错。
  • @MartinF "修改一个临时的" 怎么样?那会很糟糕吗?

标签: c++ shared-ptr dereference


【解决方案1】:

是的,这是有效的。 Operator * 返回解引用存储的(原始)指针的结果。

取消引用(原始)指针不会复制或返回临时指针:dereferencing a pointer when passing by reference

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2020-04-21
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多