В настоящее время я работаю над новым проектом со своей командой в Cpp, и мы решили попрощаться со старомодными необработанными указателями и попробовать умные указатели.
Я действительно новичок в этом мире и решил попробовать несколько вещей, которые мне понадобятся для нашего проекта, прежде чем использовать их по-настоящему.
Дело в том, что я начал с основ, а потом застрял на этом.
Когда я создаю два новых (общих) указателя (см. код ниже) с помощью функции make_shared, а затем (перекрестно) сохраняю их во внутреннем векторе другого, ни один из них не уничтожается в конце программы.
shared_ptr.cpp:
#include <iostream>
#include <memory>
#include <vector>
#include <string>
using namespace std;
class Object{
public:
vector<shared_ptr<Object>> list;
string name;
Object(string name){
this->name=name;
}
~Object(){
cout<<"...Deleting "<<name<<endl;
}
};
int main(){
shared_ptr<Object> o1 = make_shared<Object>("o1");
shared_ptr<Object> o2 = make_shared<Object>("o2");
o1->list.push_back(shared_ptr<Object>(o2));
o2->list.push_back(shared_ptr<Object>(o1));
}
инструкции для компилятора
g++ shared_ptr.cpp -o shared.o && ./shared.o
Мой вопрос здесь: не должен ли общий указатель обрабатывать саму ссылку? Или я должен очистить внутренний вектор до завершения программы?
Может быть, мне просто нужно хранить необработанные указатели во внутренних списках и просто придерживаться интеллектуальных указателей в тех разделах, где я их создаю и удаляю.
Я должен использовать аналогичную структуру в своем проекте, поэтому я хотел сначала спросить здесь, прежде чем разочаровываться и возвращаться к старому (но эффективному) необработанному указателю.
Спасибо!
Object
и отключили бы их? - person David Schwartz   schedule 15.08.2019