C++ 中的运算符 = 和析构函数

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

在 = 运算符中,我想用参数中想到的任何内容替换 m_Sent 和 m_Acept 的内容。 m_Acept 和 m_Sent 是指向链表的指针。我首先删除所有内容然后创建新元素并复制所有内容或者应该以某种方式将其委托给析构函数是正确的。如果问题有点愚蠢,我很抱歉,我正在简单地编程

我将不胜感激任何建议

完整程序:https://godbolt.org/z/hvqMM1jnv

class CMailServer 
{
 ...
  private:
    CMail **m_Sent;
    CMail **m_Acept;
    ...
};

CMailServer::~CMailServer (void)
{
    if(m_Sent)
    {
        for (size_t i = 0; i < m_Len_Sent; i++) 
        {
            CMail* current_mail = m_Sent[i];
            while (current_mail != NULL) 
            {
                CMail* next_mail = current_mail->getNext();
                delete current_mail;
                current_mail = next_mail;
            }
        }
        delete[] m_Sent;
    }
    
// same as m_Sent
    if(m_Acept)
    {...}
}

CMailServer & CMailServer::operator = (const CMailServer & src)
{
    if(this == &src) return *this;

    for (size_t i = 0; i < m_Len_Sent; i++) 
    {
        CMail* current_mail = m_Sent[i];
         
        while (current_mail != NULL) 
        {
            CMail* next_mail = current_mail->getNext();
            delete current_mail;
            current_mail = next_mail;
        }
    }

    for (size_t i = 0; i < m_Len_Acept; i++) 
    {
        .. same as for m_Sent
    }

    delete[] m_Sent;
    delete[] m_Acept;

    m_Capacity_Acept = src.m_Capacity_Acept;
    m_Capacity_Sent = src.m_Capacity_Sent;
    m_Len_Acept = src.m_Len_Acept;
    m_Len_Sent = src.m_Len_Sent;

    m_Sent = new CMail*[src.m_Capacity_Sent];
    m_Acept = new CMail*[src.m_Capacity_Acept];

    for(size_t i=0; i<m_Len_Acept; i++)
    {
        CMail *tmp = src.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());
            tailPointer->setNext(*newMail);
            tailPointer = newMail;
             
            tmp = tmp->getNext();
        }

        m_Acept[i] = headPointer;            
    }         

    for(size_t i=0; i<m_Len_Sent; i++)
    {
        // same as accept
             
    }
    return *this;
}

Explanation of the assignment operator = 

和析构函数

c++ operator-overloading destructor
© www.soinside.com 2019 - 2024. All rights reserved.