删除类 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++ 中的对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章