【发布时间】:2015-05-26 08:15:20
【问题描述】:
我有以下向量:
vector<boost::shared_ptr<Entity>> entities;
为了重置我正在使用的矢量erase
entities.erase(entities.begin(), entities.end());
问题
这个程序正确吗?会不会导致内存泄露?我也应该删除 FactClass 吗?
类实体
Entity 类的构造函数将FactClass 类型的共享指针向量作为参数
class Entity
{
public:
Entity(std::vector<boost::shared_ptr<FactClass>>);
vector<boost::shared_ptr<FactClass>> getClassFact() const;
private:
vector<boost::shared_ptr<FactClass>> _listFacts;
};
类事实类
FactClass 类的构造函数将Fact 等类型的共享指针向量作为参数。
class FactClass
{
public:
FactClass(std::vector<boost::shared_ptr<Fact>>);
std::vector<boost::shared_ptr<Fact>> getFacts() const;
private:
vector<boost::shared_ptr<Fact>> _fact;
};
【问题讨论】:
-
我实际上想重置矢量,这就是我使用
erase的原因。如果我使用 clear 有什么区别? -
clear也是正确的(并且更明确地表达了意图)。 -
@HaniGoc 打字更少,更不容易出错,并且更能表达意图
-
“我应该也删除 FactClass 吗?” 如果您仍然需要这样做,您认为
shared_ptr会起到什么作用?如果它不为你做,你为什么还要费心使用它?