У меня есть ситуация, как показано ниже, в которой у меня есть проблема в освобождении памяти. В основном у меня есть вектор, который содержит указатель на объекты из класса А. У меня есть другой класс B, который хранит указатель класса A от вектора. Он будет использовать objB. Проблема в том, что мне нужно управлять вектором, чтобы стереть указатель.Управление памятью на C++ с использованием обычного указателя
Итак, как я могу освободить память objA, как в описании ниже?
передать по значению objA и сделать копию в objB?
удалить указатель на objA в деструкторе objB? (Я бы тоже не хотел этого делать, потому что только когда логика выполнена, мне нужно удалить указатель и удалить объект. В противном случае я хотел был бы сохранить объект.
vectorA < классA *> В.Т.; .... хранение множественного указателя на объекты в вектор
ClassB * objB = новые ClassB (vt.at (поз));.
какая-то логика выполняется Если оно выполнено, нужно стереть конкретный объект из вектора.
vt.erase (pos); ==> как освободить память, если я удалю указатель здесь ? Я не мог назвать delete здесь, потому что objB может понадобиться позже использовать objA.
классB :: классB (классA * objA) { this-> objA = objA; }
Так есть ли способ, чтобы освободить память, используя обычный указатель, как в описанном выше случае? Как некоторые из ответов направили меня на использование умного указателя, мой вопрос в том, есть ли какой-либо штраф за выполнение с помощью умного указателя? (например, индефинистический сборщик мусора C# на самом деле не идеален для высокопроизводительного приложения).
[Использовать интеллектуальные указатели и RAII.] (Http://stackoverflow.com/questions/3681455/what-is-the-philosophy-of-managing-memory-in-c/3681471#3681471). Тогда вы не знаете, я должен беспокоиться о том, как управлять вещами самостоятельно. Действительно, это намного, намного, намного проще и гораздо меньше подвержено ошибкам. –