gpt4 book ai didi

c++ - 合成析构函数是否会破坏堆上分配的内存?

转载 作者:行者123 更新时间:2023-12-05 01:26:45 28 4
gpt4 key购买 nike

我有一个没有析构函数和构造函数的类:

class Foo {
public:
Foo(int a) : p(new int(a)) {}

private:
int *p;
};
{
Foo a(4);
}

在这段代码之后,分配在堆上的内存会被释放吗?或者我是否必须明确提供这样的析构函数:

class Foo {
public:
Foo(int a) : p(new int(a)) {}
~Foo();

private:
int *p;
};

Foo::~Foo() {
delete p;
}

最佳答案

我们使用new 在堆上分配的任何内存必须始终使用关键字delete 释放。

因此,您必须像在析构函数中所做的那样,使用关键字delete 显式释放由new 在堆上分配的内存。合成析构函数不会为你做这件事。

请注意,如果您不想自己处理内存管理,那么您可以使用智能指针。这样您就不必自己显式地使用 delete,因为对应于智能指针的析构函数将负责释放内存。这实质上意味着如果名为 p 的数据成员是智能指针而不是普通(内置)指针,那么您不必必须编写 delete p 在类 Foo 的析构函数中。

关于c++ - 合成析构函数是否会破坏堆上分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70060871/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com