Сегодня я вернулся и исследовал ошибку, которую я получил в старом проекте. Это не совсем ошибка, скорее, я не знаю, как делать то, что мне нужно делать. Не хотите вдаваться в детали проекта, поскольку он старый, багги и неэффективен и, что более важно, не имеет значения. Поэтому я закодировал новый образец кода:Указатель Копировать в область видимости C++
#include <iostream>
#include <vector>
#include <time.h>
#include <random>
#include <string>
class myDoc;
class myElement
{
int myInt;
std::string myString;
myElement * nextElement;
//a pointer to the element that comes immediately after this one
public:
myElement(int x, std::string y) : myInt(x), myString(y){};
friend myDoc;
};//an element type
class myDoc
{
std::vector<myElement> elements;
public:
void load();
~myDoc()
{
//I believe i should delete the dynamic objects here.
}
};// a document class that has bunch of myElement class type objects as members
void myDoc::load()
{
srand(time(0));
myElement * curElement;
for (int i = 0; i < 20; i++)
{
int randInt = rand() % 100;
std::string textInt = std::to_string(randInt);
curElement = new myElement(randInt,textInt);
//create a new element with a random int and its string form
if (i!=0)
{
elements[i-1].nextElement = curElement;
//assign the pointer to the new element to nextElement for the previous element
//!!!!!!!!!!!! this is the part that where i try to create a copy of the pointer
//that goes out of scope, but they get destroyed as soon as the stack goes out of scope
}
elements.push_back(*curElement);// this works completely fine
}
}
int main()
{
myDoc newDoc;
newDoc.load();
// here in newDoc, non of the elements will have a valid pointer as their nextElement
return 0;
}
Basic изношенном: мы имеем тип документа, который состоит из вектора типа элемента мы определяем. И в этом примере мы загружаем в документ 20 случайных динамически выделенных новых элементов. Мои вопросы/проблемы:
- Когда функция
void myElement::load()
заканчивается, указатель и/или копии он выходит из области видимости и удаляются. Как сохранить копию, которая остается (не совсем статичной, не так ли?) По крайней мере до тех пор, пока объект, на который он указывает, не будет удален? - Объекты в векторе
elements
, являются ли они исходными динамически выделенными объектами или являются ли они просто копией? - Я выделяю память
new
, как/когда должен idelete
их?
Вот фотография, которую я нарисовал, чтобы объяснить 1-ю проблему (не очень точный для конкретного примера, но проблема такая же), и спасибо за ваше время.
Пожалуйста, напишите [минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) - настолько лучше, чем картина того или иного. –