移动构造和内存泄漏 C++ [关闭]

问题描述 投票:0回答:0

我有这个内存泄漏: `==1==错误:LeakSanitizer:检测到内存泄漏

1 个对象中的 104 字节直接泄漏,分配自:

#0 0x56552328e39d in operator new(unsigned long) /root/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
#1 0x56552329a795 in CMailServer::inbox(char const*) const /app/example.cpp:625:30
#2 0x56552329ed6b in main /app/example.cpp:728:27
#3 0x7f2831865082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082) (BuildId: 1878e6b475720c7c51969e69ab2d276fae6d1dee)`

625行对应的是这个:

CMailIterator CMailServer::inbox (const char *email) const
{
    for(size_t i=0; i<m_Len_Acept; i++)
    {
        if(m_Acept[i]->compareByTo(CMail("", email,"")))
        {
            CMail *tmp = m_Acept[i];

            CMail *newMail = new CMail(tmp->getFrom(), tmp->getTo(), tmp->getBody());
            
            CMail *headPointer = newMail;
            CMail *tailPointer = newMail;
        
            tmp = tmp->getNext();

            while(tmp)
            {
                  newMail = new CMail(tmp->getFrom(), tmp->getTo(), tmp->getBody()); // 625
                  tailPointer->setNext(*newMail);
                  tailPointer = newMail;
                  
                  tmp = tmp->getNext();
            }
            
            return CMailIterator(headPointer);
        }
             
    } 
    return  CMailIterator(nullptr);

}

所以我想创建一个新元素,

95号线

CMail& CMail::operator = (CMail &&src) noexcept
{
    if(this == &src)
        return *this;  // line 95
    
    m_From = src.m_From;
    m_This = src.m_This;
    m_Body = src.m_Body;
    m_Next = src.m_Next; // possible error ?
 
    return *this;
}

主要

  CMailIterator i1 = s0 . inbox ( "john" );

我想知道为什么它被称为运动构造函数?或者,如何解决它,以免发生内存泄漏。链接到整个程序:https://godbolt.org/z/5cv8TYr8x

更好的设置程序

c++ memory-leaks operator-overloading move
© www.soinside.com 2019 - 2024. All rights reserved.