【发布时间】:2013-08-17 15:48:34
【问题描述】:
struct SomeStruct
{
};
class C
{
public:
C()
{
for (int i = 0; i < 100; ++i)
{
m_List.push_back(new SomeStruct);
}
}
private:
std::list<SomeStruct*> m_List;
};
两种析构函数变体中的哪一种更快(为什么?)释放内存:
~C()
{
for (auto iter = m_List.begin(); iter != m_List.end(); ++iter)
{
delete *iter;
}
}
~C()
{
while (m_List.size() != 0)
{
delete *m_List.begin();
m_List.pop_front();
}
}
【问题讨论】:
-
那些原始指针非常有问题。我建议只使用
SomeStruct,直到证明您需要指针,然后使用智能指针。 -
克里斯,我知道智能指针,这个问题不是关于如何存储指针,我只想让你选择一个析构函数并解释你为什么选择它。
-
@Edward83:我没有投反对票,但我能想到有人可能投反对票的几个原因。您正在使用原始指针。人们经常对他们认为通常是糟糕的代码 投反对票,在我的书中,这就是事实。您正在向我们询问两个sn-ps代码之间的性能差异,您应该做的是自己测试它。
-
我真的怀疑性能差异对任何事情都很重要,并且由于首先不应使用此代码这一事实而无效。如果您非常担心性能,您可以使用
(100, new SomeStruct)来初始化列表,而不是使用push_backs 的显式循环。 -
为什么是
std::list<SomeStruct*>而不是std::vector<SomeStruct>?
标签: c++ performance destructor stdlist