【问题标题】:What would be the equivalent of this code using std::shared_ptr使用 std::shared_ptr 的代码相当于什么
【发布时间】:2021-10-03 15:15:26
【问题描述】:
int main() {
    std::deque<My_Int*> table;

    My_Int* table_entry = new My_Int(2);
    table.push_back (table_entry);

    My_Int** new_obj = &table.front();

    *new_obj = new My_Int(3); 
    
    std::cout << table.front()->data << std::endl; // prints 3 as intended
}

我主要对带有双指针的行感到困惑。我将如何使用智能指针复制它?谢谢你的帮助。 (我知道代码没有正确清理)

编辑:为了澄清起见,使用智能指针时的双端队列也是 shared_pointers 的双端队列。

【问题讨论】:

  • 如果代码使用更简单的My_Int*&amp; new_obj = table.front();,您知道如何将其更改为std::shared_ptr吗?
  • 无关:请记住,在 C++ 中,您不必使用 new 对象。您可以避免使用std::deque&lt;My_Int&gt; table;table.emplace_back (2); 的间接级别

标签: c++ smart-pointers


【解决方案1】:
int main() {

    std::deque<std::shared_ptr<My_Int>> table;

    table.push_back (std::make_shared<My_Int>(2));

    std::shared_ptr<My_Int> &new_obj = table.front();

    new_obj = std::make_shared<My_Int>(3);

    std::cout << table.front()->data << std::endl;
}

这是我从 yyyy 的回答中得出的解决方案。我从未见过在声明 shared_ptr 时使用 & 运算符,但我认为这是有道理的。

如果有人能阐明 & 运算符在这种情况下是如何工作的,我仍然有点困惑。谢谢

【讨论】:

  • 在这个上下文中它不是一个操作符,它声明了一个引用变量(到一个std::shared_ptr&lt;My_Int&gt;)类型
  • FWIW 您也可以将其声明为 std::shared_ptr&lt;My_Int&gt;* new_obj = &amp;table.front();(并在下一行使用 *new_obj = ),但在 C++ 中不太常见
  • @UnholySheep 是的,但那不会是共享指针
  • 我不明白你的意思。这将是一个指向共享指针的指针,这与您在此答案中对共享指针的引用非常相似
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2021-09-15
  • 1970-01-01
  • 2012-12-26
  • 2011-08-20
相关资源
最近更新 更多