【发布时间】:2015-06-04 10:03:39
【问题描述】:
我有一个带有缓冲区的类,该缓冲区稍后会通过读取文件来填充:
char* m_buffer;
...在类析构函数中我执行以下操作:
int i;
for(i=0; i < m_size; i++) {
delete (char*)m_buffer[i];
}
delete m_buffer;
我在delete (char*)m_buffer[i] 收到编译器警告:
警告:从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
我已经阅读了一些关于类似问题的其他问题,但我无法理解这些解决方案是如何应用的。
更新 并回答cmets:m_buffer初始化如下:
m_buffer = new char[m_size];
【问题讨论】:
-
m_buffer[i]是char。m_buffer在析构函数中指向什么样的对象?另外,请考虑使用std::vector<char>。 -
是的,你应该删除一个指针,不要将字符转换为指针... char sizeof 是 1,指针可能是 4 或 8...
-
假设您分配了内存ala
m_buffer = new char[n];,您不需要delete缓冲区中m_buffer分别指向的每个字符:只需delete[] m_buffer,或者更好 - 使用std::string按价值. -
@juanchopanza:
char??? ...我正在使用std::ifstream读取文件并声明m_buffer = new char[m_size]。 -
@IAbstract:您的理解是错误的:实际指针
m_buffer应该在包含它的对象时被释放,无论是因为它是一个超出范围的局部变量还是因为它是一个动态分配的变量deleted;无论哪种方式,您都不必分离释放包含m_buffer的类的每个数据成员。 “不是单独的指针” - 为什么是指针s 复数?m_buffer表面上是一个指向char数组的指针。
标签: c++ arrays pointers gcc destructor