c++ - 列表分配错误 <shared_ptr>

标签 c++ c++11 shared-ptr bad-alloc

我有这个虚拟方法:

const string& my_class::to_string() const
{
    string str(this->name + string(" "));

    if(!this->children.empty())
    {
        for(const std::shared_ptr<base_class> e : this->children)
            str.append(e.get()->to_string());
    }

    return str;
}

在哪里childrenstd::list<std::shared_ptr<base_class>> , 和 my_class继承base_class .但是,在第一次递归调用(my_class::to_string)之后,在我返回这个 child 之后 str , 我得到一个错误的分配。

为什么?

最佳答案

正如 BoBTFish 所指出的,您应该将函数签名更改为:

string my_class::to_string() const

因为您是在本地修改字符串,而不仅仅是返回对类成员的引用。否则,您只需返回对本地字符串的引用,即 UB。

关于c++ - 列表分配错误 <shared_ptr>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329770/

相关文章:

c++ - 我的回击不起作用?

c++ - 如何对具有 2 个模板值的类中的函数仅使用 1 个模板值

C++递归嵌套类型和名称注入(inject)

c++ - 在 C++ 中保持对象持久化?

c++ - BOOST_FOREACH 对 boost::shared_ptr<list> 的迭代

c++ - 如何组合 if() 以便只调用一次函数以避免分支未命中?

Eclipse 中的 C++ 错误

c++ - 在 map 中就地构建不可 move 的对象

c++ - 在 C++ 中键入安全(r)位标志?

shared-ptr - shared_ptr 断言像素!= 0 失败