我正在使用一个带有函数的对象工厂来创建和注册新对象:
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);
}
}
在这两种情况下,它实际上是在取消分配内存吗?
在这两种情况下,它实际上是在取消分配内存吗?
是。删除指针的副本和通过引用删除相同的指针之间没有区别。后者引入了一个冗余的间接层(可能已经过优化)。
附:拥有裸指针是一个糟糕的设计。更喜欢智能指针并考虑Object
s是否首先需要单独存储。