删除类 C++ 中的对象 [关闭]

Posted

技术标签:

【中文标题】删除类 C++ 中的对象 [关闭]【英文标题】:Delete object inside the class C++ [closed] 【发布时间】:2014-09-04 09:10:36 【问题描述】:

我的课程中有一部分用于逐字节读取数据,直到出现'\0'

RESULT MyClass::readMethod(DataInputStream& s)    

    if ( condition = ok )
       
        char tmp[32];
        uint8 i = 0;
        do 
            tmp[i] = s.read_int8();
         while (tmp[i++] == '\0');

        char *arr= new char[i];

        for (uint8 j = 0; j < i; ++j)
        
            arr[j] = tmp[j];
        
        //delete[] arr;
    

我为这篇文章删除了很多代码,因为其余部分不太重要。 我的问题是,我想释放内存,但是因为我有方法:

我试过把它放入析构函数中:

MyClass::~MyClass()

    delete [] arr;

但是编译器(我使用 Visual Studio 2010)在下面划线并说:"Error: identifier arr is undefined". 我不能在评论的地方使用它,因为我有以下方法:

char * getArr()

    return arr;

但是,我不知道它是否会起作用,我的意思是,如果我可以在课堂外访问arr。我还在学习 C++ 和 OOP,有时我很困惑。 与构造函数类似的问题:如何将arr 初始化为空。

【问题讨论】:

arr 的有效期应该是多久?谁负责删除它?如果该类负责,则该类需要在某处保存它的副本,以便以后可以将其删除。 (为什么要标记C?) 如果不需要,避免使用指针,在这种情况下使用std::string。而arr 对析构函数来说是未知的,因为它是readMethod() 的局部变量 如果没有名为arr 的成员,char * getArr() return arr; 如何编译? char *arr= new char[i];readMethod() 的本地。使其成为类成员变量,以便从类的其他成员函数中访问它。 arr 是存储 PIN 码的数组。只要有人决定删除它并更改 PIN(删除arr,然后再创建一个),它就应该保留——这就是我想使用析构函数的原因。我不知道谁应该为此负责,这是问题之一。如何在某处复制以稍后将其删除?我删除了c'c'标签,对不起,点击了'suggested'。 【参考方案1】:

您的 arr 对于 readMethod 是本地的。所以析构函数不知道它。您必须将 arr 声明为类成员。

class MyClass


  private:
     char* arr;

然后你可以在你的析构函数中删除它。

【讨论】:

没错,谢谢。由于我研究了这么久,我忘了用类声明修改 .h 文件。顺便说一句,我很伤心,我的很多 C++ 帖子都被否决了,我不知道为什么,所以我不能做出更好的帖子 :( @Kappa "...所以我无法发布更好的帖子"您可能需要先read this,然后再发布您的下一个问题。

以上是关于删除类 C++ 中的对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从向量中删除对象会破坏 C++ 中另一个对象中的对象

C++ 删除静态数据

当指向删除和指向不同的对象时,C++ 中的 Seg 错误指针

Windows 驱动程序中的 C++ [关闭]

删除链表 C++ 中的特定节点

从 C++ 中的数组中删除重复项 [关闭]