我试图找出最好的方法来保持指向刚刚创建并添加到成员变量向量的向量中的元素的指针:
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(); }