我有一个C ++类,我有指向对象的原始指针。指向对象的指针将传递给函数。问题是底层函数可能需要将指针有时存储在STL容器中,稍后将使用指向该对象的指针。如果我没有使用shared_ptr,我想在类中添加一个bool标志,指示函数的调用者是否负责删除对象内存。那会没事吗?
感谢。
答案 0 :(得分:2)
凌乱。并且充斥着许多潜在的错误,这些错误会让你在星期六的午夜过夜。
明确并保持资源所有权。向量拥有指针,或者某些特定函数拥有指针,或智能指针拥有指针。任何这些语义的混合都将导致你在深夜撕裂头发的最终结果。
最好的解决方案通常是使用引用计数的智能指针。 (正如你可能已经知道的那样,你不能使用std::auto_ptr
)除此之外,创建一个类,其生命的唯一目的是分配,释放和授予对向量包含指针的访问权限。任何需要包含对象的函数都会通过你的经理类来获取它们。
答案 1 :(得分:1)
STL容器几乎肯定会获取您插入其中的对象的副本。从容器中删除对象时,该对象将被销毁。
如果默认的复制构造函数不够(即您需要对该对象进行深层复制),则需要确保实现自己的版本,以便正确复制。