首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义一个包含结构的地图

定义一个包含结构的地图
EN

Stack Overflow用户
提问于 2011-06-09 21:29:29
回答 6查看 1.9K关注 0票数 0

我有一个这样的结构

代码语言:javascript
复制
struct category {
    int id,newID;
    std::string name;
};

和一个地图,比如

代码语言:javascript
复制
std::map<std::string, category> categories;

将详细信息插入到地图中是否安全

代码语言:javascript
复制
category x = {1,2,"Name"};
category y = {2,3,"Mike"};
categories["FIRST"]=x;
categories["SECOND"]=y;

或者我应该像这样声明地图

代码语言:javascript
复制
std::map<std::string, category*> categories;

并制作结构指针并将其插入?哪一个更安全?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-09 21:34:08

你说的更安全是什么意思?这两种方法都很好。当使用第二种方法时,你必须确保删除你的类别对象。在第一个版本中,它们会在您删除地图时自动删除。

如果您需要大量传递对象,则第一种方法速度较慢,因为您将制作副本。第二个只是复制指针。

因此,您可以决定哪一个适合您的需求。

票数 2
EN

Stack Overflow用户

发布于 2011-06-09 21:33:48

如果您指的是避免资源泄漏的安全性,那么在您的特定示例中,第一个变体是完全安全的。

如果您使用指针,您可能希望在堆上创建实例,这意味着手动内存管理,这很容易出错。

第二种解决方案可能具有的唯一问题(在安全性方面)是对象需要是可复制的。如果对象手动管理任何资源,则必须确保正确实现了复制构造函数和赋值运算符。

票数 1
EN

Stack Overflow用户

发布于 2011-06-09 21:38:44

如果没有更多的上下文,你的问题就不能真正得到回答。

一个天真的答案可能是“插入结构本身更安全,因为你不必担心内存泄漏”。然而,这样的答案并不是真正令人满意。

要得到更好的答案,您必须考虑以下几个因素:

  1. 你的struct应该是可复制的吗?换句话说,在您的应用程序域中,拥有同一结构的多个副本是否有意义?如果不是,你应该使用指针。
  2. 你的struct,在它的当前形式,是可复制的,并且有深层的复制语义。在未来,您是否有可能向其添加成员,从而导致深度复制语义被破坏?如果是这样的话,你将不得不以某种方式来处理这个问题。这与前面的项目相关,因为struct的可复制性和复制语义应该影响您的决定。
  3. 您的map可能有很多条目吗?是否可能有很多键不同但值不同的条目?在这种情况下,使用指针将节省内存。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6293531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档