Допустим, у меня есть следующие:Условия для удаления ЗППП :: shared_ptr
class Bar
{
public:
int i;
};
class Foo
{
public:
std::vector<std::shared_ptr<Bar>> vector;
};
class FooBar
{
public:
std::shared_ptr<Bar> myBar;
};
int main()
{
Foo foo;
FooBar foobar;
foobar.myBar = std::make_shared<Bar>();
foo.vector.push_back(foobar.myBar);
foobar.myBar = nullptr;
}
ли как myBar и foo.vector.back() равна nullptr? Они оба были удалены? Каким будет правильный способ сделать это? Мой endgoal должен иметь вектор указателей на объекты, создавать объекты и помещать их в этот вектор из другой области видимости, затем в область, которую они были созданы при их удалении, и удалить их из вектора. Мой мыслительный процесс заключается в том, что я могу как-то легко удалить все экземпляры указателя, тогда я могу просто проверить каждый кадр, чтобы удалить shared_ptr из вектора, если он равен nullptr.
Никогда не называйте переменные такими же, как стандартные классы, т. Е. 'Vector'. –
Нет, только 'myBar' равно null. 'foo.vector.back()' все еще содержит ссылку на общий объект. Вот почему он называется 'shared_ptr'. Вы можете легко проверить это, добавив конструкторы (включая копирование и перемещение) и деструктор для «Бар» и напечатайте сообщения от них. –