В приведенной ниже программе строка добавляется в пустой магазин. Затем адрес этого элемента хранилища хранится в указателе 's1'. Затем добавляется другая строка, и это как-то заставляет указатель на исходный элемент терпеть неудачу.строки и магазин
#include <iostream>
#include <string>
#include <vector>
class store2
{
public:
void add(std::string s) {words.push_back(s); last_added2 = &words.at(words.size() - 1);}
std::string* last_added() {return last_added2;}
private:
std::string* last_added2;
std::vector<std::string> words;
};
void main()
{
store2 store;
store.add("one");
std::string* s1 = store.last_added();
std::cout<<*s1<<std::endl;
store.add("two");
std::cout<<*s1<<std::endl; // crash
}
Он не должен быть std :: vector, и многие из способностей std :: vectors не требуются, но он нуждается в изменении размера, и элементы должны быть надежно адресуемыми. – alan2here
Если вам не нужен произвольный доступ, вы можете использовать 'std :: list' – peoro
Возможно ли получить доступ к последнему добавленному элементу в список и сохранить адреса для отдельных элементов? – alan2here