C++ 从std::queue推送结构和弹出时内存泄漏

C++ 从std::queue推送结构和弹出时内存泄漏,c++,memory-management,memory-leaks,C++,Memory Management,Memory Leaks,我有一个结构,我将它从一个线程推送到std::queue,然后从另一个线程弹出。操作是线程安全的,但泄漏检测器中存在泄漏 struct Data { double x,y; float z; float a,b,c; int frame; double timestamp; Data& operator=(const SDTNavData& rhs); }; Data& Data::operator=(const Data&a

我有一个结构,我将它从一个线程推送到std::queue,然后从另一个线程弹出。操作是线程安全的,但泄漏检测器中存在泄漏

struct Data
{
  double  x,y;
  float   z;
  float  a,b,c;     
  int frame;
  double timestamp;
  Data& operator=(const SDTNavData& rhs);

};

Data& Data::operator=(const Data& rhs)
{
  if (this != &rhs)
   {
     x= rhs.lat;
     y= rhs.lon;
     z= rhs.alt;

     a= rhs.yaw;
     b = rhs.pitch;
     c  = rhs.roll;

     frame = rhs.frame;

    timestamp = rhs.timestamp;
}

return *this;
}
当我创建一个std::queue并从队列中推送和弹出数据时,它会给我一个泄漏报告

Data d;
std::queue<Data> my_queue;

my_queue.push(d);

D new=my_queue.front();

my_queue.pop();

做出有根据的猜测,因为您发布的代码有几个问题。我假设您遇到的问题是,在将队列数据d分配到内存之前,您正在将其推入队列:

Data *d;
std::queue<Data*> my_queue;
my_queue.push(d);
d = new Data();   
my_queue.pop();

现在,推送到队列中的d的副本指向分配的内存。

内存探查器是否能够处理多个线程?如果不是,那么可能是一个错误的报告。但是我看到Windows上的任务管理器中的内存使用正在增加,语句D new=my_queue.front;是否?将创建的变量分配到队列前面,我认为这在语法上是不正确的。此外,除非我遗漏了什么,否则重载运算符=定义中的输入参数与其声明中的输入参数不对应。d=新数据;不会编译。新表达式返回一个指针,您正试图将其分配给一个对象。@谢谢您的注释,我会更正它。我的建议是在代码中完全避免使用新的和指针。这里似乎没有令人信服的理由来进行手动内存管理,修复泄漏的最简单方法是停止使用新内存。我完全同意,但这毕竟是一个假设。
Data *d;
d = new Data();
std::queue<Data*> my_queue;
my_queue.push(d);
...
my_queue.pop();