c – 返回指向矢量元素的指针

前端之家收集整理的这篇文章主要介绍了c – 返回指向矢量元素的指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出最好的方法来保持指向刚刚创建并添加到成员变量向量的向量中的元素的指针:
SceneGraphNode* addChild(std::string name){
    SceneGraphNode child(this,name);
    m_children.push_back(child);
    return &child;
}

编译器正确地给了我一个警告,因为我返回在堆栈上创建的对象的地址,并且该函数将在函数结束时超出范围.但是,对象存在于向量中,对吧?

那么,我应该忽略警告还是有更好的方法来做到这一点?

解决方法

However,the object lives on in the vector,right?

不,它的副本.您想要返回副本的地址.

return &m_children.back();

但是,将指针存储到驻留在向量中的对象并不是一个好主意.因为当向量需要重新分配时,指针将无效.也许你应该在你的向量中存储指针(最好是智能指针).

例如:

// in your class
std::vector<std::unique_ptr<SceneGraphNode>> m_children;

SceneGraphNode* addChild(std::string name)
{
    std::unique_ptr<SceneGraphNode> child(new SceneGraphNode(this,name));
    m_children.push_back(std::move(child));
    return m_children.back().get();
}

猜你在找的C&C++相关文章