我坐在这里,下面的类问题:关于对象的生命周期和回收责任
class TagCompound : public Tag
{
public:
// [...] Constructor and other methods
void insert(Tag *t);
// [...] more modifying methods
protected:
std::vector<Tag *> _values;
};
TagCompound::insert(Tag *t)
{
_values.push_back(t);
}
这是所有的乐趣和花花公子,并与衍生的Tag
一类的堆栈和堆分配对象的工作。
当然,如果提供给TagCompound::insert()
的指针在堆上分配,它必须在外部的某个位置释放。这意味着每个从vector中删除某些东西的方法都必须返回已删除的指针,以便外部可以再次释放它,如果必须的话。
我不喜欢这样,如果调用者忘记delete
它会很麻烦和容易出错。
我尝试了简单地假定每指针在矢量_values
将堆中分配和执行的缺失在每一个某种方式从_values
删除一些功能,并具有delete
运行的每个其余部件在TagCompound::~TagCompound
其他的事情。
这当然完全排除堆栈指针造成无效删除。
我也试过使用std::auto_ptr
但很快我发现它不适用于STL容器。可能有些提升,但我不想使用增强(或任何类型的第三方库)。
我是否已经用这些方法之一的正确方式,或者是否有某种黑魔法运作得更好?