在智能指针(能够获取动态区域中的资源的所有权并在使用后释放它们)出现之前,我想知道当作为参数传递给采用资源指针的函数时,如何对动态创建的对象进行簿记。
通过簿记,我的意思是如果有一个“新的”,那么在稍后的某个时候应该有一个“删除”跟随它。否则,程序将遭受内存泄漏。
这是一个示例,其中 B 是一个类,而 void a_function(B*) 是第三方库函数:
void main() {
B* b = new B(); // line1
a_function(b); // line2
??? // line3
}
我在第 3 行做什么?我是否假设第三方功能已经处理了内存的取消分配?如果它没有并且我假设它有,那么我的程序就会出现内存泄漏。但是,如果它取消分配 b 占用的内存并且我也在 main() 中这样做以便安全起见,那么 b 实际上最终会被释放两次!我的程序会因为双释放错误而崩溃!