-4

我面临这个问题:

No source available.
Call stack location: lab5.exe! Counter:: 'scalar deleting destructor'() + 0x2b bytes.

我构造了一个单链表。

计数器.h

class Counter{
    private:
        char* m_pStr; 
        unsigned int m_nOwners; 
        Counter* pNext;         
        static unsigned int m_curCounters;
        static Counter* Head;   
...

计数器.cpp

Counter* Counter:: Head = new Counter();
unsigned int Counter:: m_curCounters = 0;

Counter:: ~Counter(){
    if  (this == Head){
        Head = Head->pNext;
    }
    else{
        Counter* current = Head->pNext;
        for (int i = 0; i < m_curCounters; i++){
            if (current->pNext == this){
                            // Searching for counter, with next one equal this.
                current->pNext = this->pNext;
                break;
            }
            current = current ->pNext;
        }
    }
    m_curCounters--;
    delete[] this->m_pStr;
}

右大括号会导致错误。在图片中:一步将我与错误屏幕和错误本身分开。

截图 1 截图 2 截图 3

禁止使用 PS 矢量。

4

1 回答 1

2

你的班级需要遵循三原则
您需要提供一个复制构造函数和复制赋值运算符,它们执行动态分配的数据成员的深层副本。

或者,您可以使用智能指针而不是原始指针。这将为您节省所有显式的手动内存管理。

另外,你最好char *std::string.

于 2013-04-19T15:09:48.217 回答