在C ++中,我如何push_back一个对象并获取指向向量中对象的指针。例如
vector<Item> items;
然后我推了一个新对象
Item newItem;
items.push_back(newItem);
Item* myItem = // pointer to the pushed object in vector
如何在向量中保留指向对象的指针?
问题是如果我使用
const int last = items.size()-1;
Item* myItem = &item[last];
每当添加新元素时,指针都会被破坏。
答案 0 :(得分:2)
如果您使用push_back()
,则它将是back()
返回的项目。
所以你可以使用Item* myItem = &items.back();
但这是一个坏主意,因为只要向量扩展,迭代器和指针就会失效。
答案 1 :(得分:0)
一种解决方案是使用back
的{{1}}成员,但您无法保证该指针长时间有效。它遵循一个例子:
vector
另一种方法是使用Item newItem;
items.push_back(newItem);
Item* myItem = &items.back();
,即使它需要稍微修改您的代码。它遵循一个例子:
shared_ptr
在这种情况下,std::shared_ptr<Item> newItem = std::make_shared<Item>();
items.push_back(newItem);
已经是指针(好吧,不是裸体,有关详细信息,请参阅here)。问题是,从现在开始,您的容器实际上包含指针,我不知道它是否是一个可行的解决方案,或者它需要您更改太多代码来处理它们。
当然,您的矢量不再是newItem
类型,而是必须使用std::vector<Item>
。