我有一个结构,我将它从一个线程推送到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();
答案 0 :(得分:0)
进行有根据的猜测,因为您发布的代码有几个问题。我假设您遇到的问题是,在将内存分配到内存之前,您正在推送队列Data d
:
Data *d;
std::queue<Data*> my_queue;
my_queue.push(d);
d = new Data();
my_queue.pop();
以上是错误的,因为在队列中您推送d
而不是d
的副本。相反,以下是正确的:
Data *d;
d = new Data();
std::queue<Data*> my_queue;
my_queue.push(d);
...
my_queue.pop();
现在,队列中推送的d
副本指向已分配的内存。