我们可以在范围for for循环中对引用(而不是指针)使用delete吗?

问题描述 投票:-2回答:1

我正在使用一个带有函数的对象工厂来创建和注册新对象:

Object * MyObjectFactory::createNewObject()
{
   Object * my_object = new Object();
   m_vector_of_objects.push_back(my_object);

   return my_object;
}

我现在正在编写删除操作符,我只是循环遍历向量并删除所有对象,我想知道是否存在以下区别:

MyObjectFactory::~MyObjectFactory()
{
   // Destroy memory allocated objects
   for (auto * my_object : m_vector_of_objects)
   {
      delete(my_object);
   }
}

MyObjectFactory::~MyObjectFactory()
{
   // Destroy memory allocated objects
   for (auto &my_object : m_vector_of_objects)
   {
      delete(my_object);
   }
}

在这两种情况下,它实际上是在取消分配内存吗?

c++
1个回答
2
投票

在这两种情况下,它实际上是在取消分配内存吗?

是。删除指针的副本和通过引用删除相同的指针之间没有区别。后者引入了一个冗余的间接层(可能已经过优化)。

附:拥有裸指针是一个糟糕的设计。更喜欢智能指针并考虑Objects是否首先需要单独存储。

© www.soinside.com 2019 - 2024. All rights reserved.