std::shared_ptr在QList中删除时不删除内容

std::shared_ptr in QList does not delete content on deletion

下面将一堆shared_ptr包含一个任意对象放在一个QList中。我用大括号创建了一个堆栈,当指令指针离开时触发列表的删除。不知何故 shared_ptrs 被删除。为什么?我在 gnome-systemmonitor 和 htop 中跟踪内存消耗。

{
    QList<std::shared_ptr<QChar>> l;
    for (int i =0; i< 1024*1024*10; ++i)
        l.append(std::make_shared<QChar>('h'));
}
qDebug() <<"done";
sleep(10);

我刚测试过。 QSharedPointer 也有同样的问题,但常规类型(非 [共享] 指针)没有。

小内存分配来自进程内管理的堆,而不是直接来自操作系统。测量进程内存使用情况的工具不会看到它们被释放,因为内存仍然分配给进程。

释放内存并不一定 return 到系统。根据默认分配器如何从系统请求内存,它可能 不可能 到 return 它。

如果您想跟踪内存是否被正确释放,请使用计数分配器,而不是系统监视工具。