- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我第一次使用 STL
,我很困惑我应该如何释放这些容器使用的内存。例如:
class X {
private:
map<int, int> a;
public:
X();
//some functions
}
现在假设我将构造函数定义为:
X::X() {
for(int i=0; i<10; ++i) {
map[i]=i;
}
}
现在我的问题是我应该为这个类编写析构函数还是默认的 C++
析构函数将负责(完全)释放内存?
现在考虑修改上面的类
class X {
private:
map<int, int*> a;
public:
X();
~X();
//some functions
}
现在假设我将构造函数定义为:
X::X() {
for(int i=0; i<10; ++i) {
int *k= new int;
map[i]=k;
}
}
现在我明白了,对于这样一个类,我需要编写一个析构函数,因为 new 分配的内存不能被 map
容器的默认析构函数析构(因为它调用对象的析构函数,其中这种情况是一个指针)。所以我尝试编写以下析构函数:
X::~X {
for(int i=0; i<10; ++i) {
delete(map[i]);
}
//to delete the memory occupied by the map.
}
我不知道如何删除map
占用的内存。虽然 clear
函数在那里,但它声称将容器的大小降低到 0,但不一定释放下面的内存。 vector 也是如此(我猜是 STL 中的其他容器,但我没有检查过它们)。
感谢任何帮助。
最佳答案
should I write the destructor for this class or the default C++ destructor will take care of deallocating the memory(completely)?
是的,会的。所有标准容器都遵循RAII的原则,并管理自己的动态资源。当它们被销毁时,它们将自动释放它们分配的任何内存。
I do not know how to delete the memory occupied by the map.
你不知道。当且仅当您使用 new
创建某些内容时,您才必须删除它。大多数对象都会自动分配和释放内存。
映射本身嵌入到要销毁的 X
对象中,因此它会自动销毁,一旦析构函数完成,它的内存将与对象的内存一起释放。
map 分配的任何内存都是 map 的责任;它将在自动调用的析构函数中释放它。
您只负责删除动态分配的 int
对象。由于很难确保正确删除它们,因此您应该始终使用 RAII 类型(例如智能指针或映射本身)来为您管理内存。 (例如,如果 new
的使用抛出异常,您的构造函数就会发生内存泄漏;通过存储对象或智能指针而不是原始指针可以很容易地解决这个问题。)
关于c++ - 在析构函数中处理 STL 容器的取消分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16798274/
我开始考虑在我 future 的项目或重构中实现控制反转容器,我想知道在正确设计依赖项时哪些原则(除了 GoF 模式)可能需要牢记在心。假设我需要构建一个简单的控制台应用程序,如果它可以访问互联网,它
假设我有一个 RxC contingency table 。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 “主效应”以及列的
我正在尝试使用 DKMS 为正在运行的内核 (4.4) 构 build 备树覆盖。我天真的 Makefile 如下: PWD := $(shell pwd) dtbo-y += my-awsome-o
我有一个 sencha touch 项目。我是用 phonegap 2.9 构建的,并且可以正常工作 device.uuid 返回到设备 ID。当我尝试使用 3.1 device.uuid 构建时抛出
我在安装了 Xcode 4.5.1 的 Mt Lion 上运行。 默认情况下,当我构建并部署到 iOS 5.1 设备时,显示会在我旋转设备时旋转,但当我部署到 iOS 6 模拟器或运行 iOS 的 i
我正在尝试使用 Google Analytics Reporting API v4 构建多折线图。 一张图表,其中我按每天的 session 计数为每个设备(台式机/平板电脑/移动设备)设置了一条线。
我一生都无法使用 xcode 组织者“自动设备配置”中的“团队配置配置文件”在 xcode 4.0.1 中将我的应用程序构建到我的 iPad 上。 该应用程序完美地构建到模拟器,但当我构建到 iPad
我是一名优秀的程序员,十分优秀!