【发布时间】:2016-02-19 06:49:49
【问题描述】:
假设我有以下课程:
class A {
public:
A();
~A();
//...some other functions
private:
char * data;
}
问题1:我是否必须明确定义析构函数如下:
//destructor
A::~A() {
delete [] data;
}
或者,编译器是否隐式执行此操作?
问题 2: 如果我在一个循环中反复在 main 中使用相同的构造类怎么办,A 类的数据成员是否会在每次循环后释放其内存?如果不是,我应该明确地这样做吗?
即:
int main() {
A obj;
for (int i = 0; i < 3; ++i)
getData(obj); //this function will store an input 3 times inside `data`
return 0;
}
【问题讨论】:
-
“或者,编译器是否隐含地这样做了?” 没有。“A 类是否在每次循环后释放其内存?” 把@ 987654325@ 在循环体内。
-
@πάνταῥεῖ 我必须这样做吗?
-
@Lieft1951 可以,否则会导致内存泄漏。
-
Q1:c++ 存储数据的方式是使用 std::string 或 std::vector
。它们将在销毁时自动释放。原始指针不会被释放。 -
对于每个
new,您需要有一个delete。还有什么好聊的?
标签: c++ destructor