我有一个结构,其中我使用了std :: deque
class VariantWrapper;
typedef _STL_NAMESPACE_::deque<VariantWrapper> VariantQueue;
struct AttributeValueWrapper
{
AttributeValueWrapper() : bAttributeIsArray(false)
{
pVariantQueue = new VariantQueue;
if(!pVariantQueue)
throw std::bad_alloc();
}
AttributeValueWrapper(const AttributeValueWrapper& a)
{
pVariantQueue = a.TakeOwner();
bAttributeIsArray = a.bAttributeIsArray;
}
AttributeValueWrapper& operator=(AttributeValueWrapper& r)
{
throw std::bad_exception("equal operator not supported in AttributeValueWrapper");
}
VariantQueue* TakeOwner() const
{
VariantQueue *p = pVariantQueue;
pVariantQueue = NULL;
return p;
}
~AttributeValueWrapper()
{
if (pVariantQueue)
{
delete pVariantQueue;
}
}
bool bAttributeIsArray;
mutable VariantQueue *pVariantQueue;};
主要方法:
int main()
{
AttributeValueWrapper attrib;
}
我在Dr Memory下运行这段代码(这只是一段代码,项目非常大)而且Dr Memory显示内存泄漏
pVariantQueue = new VariantQueue
在默认构造函数中
为:
错误#46:LEAK 8个直接字节+ 324个间接字节 replace_operator_new d:\ drmemory_package \共同\ alloc_replace.c(2899): 的std :: _分配&LT;&GT; - :0 的std ::分配器&LT;&GT; ::分配 - :0 的std :: _ Wrap_alloc&LT;&GT; ::分配 - :0 的std :: _ Deque_alloc&LT;&GT; :: _ Alloc_proxy - :0 的std :: _ Deque_alloc&LT;&GT; :: _ Deque_alloc&LT;&GT; - :0 的std ::双端队列&LT;&GT; ::双端队列&LT;&GT; - :0 AttributeValueWrapper :: AttributeValueWrapper
请分享您对此问题的看法。
我也尝试过使用std::unique_ptr
,但仍然在同一行没有(同一点)获得相同的内存泄漏:
struct AttributeValueWrapper
{
AttributeValueWrapper() : bAttributeIsArray(false)
{
pVariantQueue = std::make_unique<VariantQueue>(new VariantQueue);
if(!pVariantQueue)
throw std::bad_alloc();
}
AttributeValueWrapper(const AttributeValueWrapper& a)
{
pVariantQueue = a.TakeOwner();
bAttributeIsArray = a.bAttributeIsArray;
}
AttributeValueWrapper& operator=(AttributeValueWrapper& r)
{
throw std::bad_exception("equal operator not supported in AttributeValueWrapper");
}
std::unique_ptr<VariantQueue> TakeOwner() const
{
std::unique_ptr<VariantQueue> p = std::move(pVariantQueue);
pVariantQueue = NULL;
return p;
}
~AttributeValueWrapper()
{
}
bool bAttributeIsArray;
mutable std::unique_ptr<VariantQueue> pVariantQueue;
};
现在出现内存泄漏
pVariantQueue = std::make_unique<VariantQueue>(new VariantQueue);
维奈
答案 0 :(得分:1)
您的内存泄漏最有可能在析构函数中找到。当队列消失时,队列中的对象会发生什么?