为什么静态类成员没有内存泄漏错误?

时间:2018-12-19 09:16:02

标签: c++

我想用一些静态函数和一个辅助动态分配数组封装一个排序类。我最近在想在哪里delete[]动态数组。但是我发现没有任何内存泄漏错误,全局范围内的动态allocatd数组也没有。为什么?这里有什么规则?

#include <iostream>

struct Foo{
    static int *j;
};

int* Foo::j = new int[10]; //no memory leak error

// int *q = new int[10]; //no memory leak error
int main(){
    // int *q = new int[10]; //memory leak error
    return 0;
}

我使用clang++ -fsanitize=address -g -Wall main.cpp; ASAN_OPTIONS=detect_leaks=1 ./a.out检测内存泄漏。

2 个答案:

答案 0 :(得分:3)

在静态/全局情况下,分配的int []不会丢失,因为它可以访问,为什么会出现内存泄漏?

答案 1 :(得分:1)

堆清洗器经常在静态对象初始化期间无法跟踪分配,这就是这里发生的情况。全局指针也不例外,动态分配的数组也会泄漏。

正确释放全局资源的唯一方法是管理它的对象的析构函数。换句话说,照常使用std::vector