小编Mat*_*zar的帖子

std::map 中值的内存分配

我从学校工作中获得了一些 C++ 经验。我了解到,除其他外,对象应该作为指针存储在容器(向量、映射等)中。主要原因是我们需要使用 new-operator 和复制构造函数,以便在对象的堆(也称为动态内存)上创建副本。此方法还需要定义析构函数。

但是,从那以后我读到的内容看来,STL 容器似乎已经将它们包含的值存储在堆上。因此,如果我将对象存储为值,无论如何都会在堆上创建一个副本(使用复制构造函数),并且不需要定义析构函数。总而言之,无论如何都会在堆上创建一个副本???

此外,如果(真),那么我能想到的使用指针存储对象的唯一其他原因是减轻复制容器的资源需求,因为指针比整个对象更容易复制。但是,这将需要使用 std::shared_ptr 而不是常规指针,因为您不希望在原始容器被销毁时删除复制容器中的元素。这种方法还可以减少定义析构函数的需要,不是吗?

编辑:要定义的析构函数将用于使用容器的类,而不是用于存储对象的类。

编辑 2:我想一个更精确的问题是:“从内存和资源使用的角度来看,使用 new 运算符将对象存储为指针,而不是普通值,这有什么不同吗?”

c++ windows stl visual-c++

3
推荐指数
1
解决办法
2706
查看次数

标签 统计

c++ ×1

stl ×1

visual-c++ ×1

windows ×1