C ++ push_back一个对象并获取指向该对象的指针

时间:2015-12-01 23:20:51

标签: c++ pointers

在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];

每当添加新元素时,指针都会被破坏。

2 个答案:

答案 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>