【发布时间】: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'。
标签: c++ class constructor destructor