使用shared_ptr的例子?

2024-04-14

你好,我今天问了一个关于如何在同一个向量数组中插入不同类型的对象 https://stackoverflow.com/questions/3475030/different-types-of-objects-in-the-same-vector-array我在该问题中的代码是

 gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
 .....
 ......
 virtual void Run()
   {   //A virtual function
   }
};
class ANDgate :public gate 
  {.....
   .......
   void Run()
   {
    //AND version of Run
   }  

};
 class ORgate :public gate 
  {.....
   .......
   void Run()
   {
    //OR version of Run
   }  

};      
//Running the simulator using overloading concept
 for(...;...;..)
 {
  G[i]->Run() ;  //will run perfectly the right Run for the right Gate type
 } 

我想使用向量,所以有人写道我应该这样做:

std::vector<gate*> G;
G.push_back(new ANDgate); 
G.push_back(new ORgate);
for(unsigned i=0;i<G.size();++i)
{
  G[i]->Run();
}

但后来他和其他许多人建议我最好使用Boost指针容器 http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/guidelines.html or shared_ptr。我花了过去 3 个小时阅读有关该主题的内容,但该文档对我来说似乎相当先进。 ****谁能给我一个小代码示例shared_ptr用法以及他们建议使用的原因shared_ptr。还有其他类型吗ptr_vector, ptr_list and ptr_deque** **

Edit1:我也读过一个代码示例,其中包括:

typedef boost::shared_ptr<Foo> FooPtr;
.......
int main()
{
  std::vector<FooPtr>         foo_vector;
........
FooPtr foo_ptr( new Foo( 2 ) );
  foo_vector.push_back( foo_ptr );
...........
}

而且我不明白语法!


Using a vector of shared_ptr消除了由于忘记遍历向量并调用而导致内存泄漏的可能性delete在每个元素上。让我们逐行浏览该示例的稍微修改后的版本。

typedef boost::shared_ptr<gate> gate_ptr;

为共享指针类型创建别名。这避免了 C++ 语言中由于键入而导致的丑陋std::vector<boost::shared_ptr<gate> >并忘记结束之间的空格大于号.

    std::vector<gate_ptr> vec;

创建一个空向量boost::shared_ptr<gate>对象。

    gate_ptr ptr(new ANDgate);

分配一个新的ANDgate实例并将其存储到shared_ptr。单独执行此操作的原因是为了防止操作抛出时可能出现的问题。在此示例中这是不可能的。这Boost shared_ptr“最佳实践” http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/shared_ptr.htm#BestPractices解释为什么它是一个最佳实践分配到独立对象而不是临时对象。

    vec.push_back(ptr);

这会在向量中创建一个新的共享指针并复制ptr进去。内部的引用计数shared_ptr确保分配的对象内部ptr被安全地转移到载体中。

没有解释的是析构函数shared_ptr<gate>确保删除分配的内存。这就是避免内存泄漏的地方。析构函数为std::vector<T>确保析构函数T为向量中存储的每个元素调用。然而,指针的析构函数(例如,gate*) 不会删除您分配的内存。这就是你试图通过使用来避免的shared_ptr or ptr_vector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用shared_ptr的例子? 的相关文章

  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • return 语句是否为按值返回的函数创建临时对象?

    当我学习 C 11 右值引用和移动语义时 我开始对函数如何返回值来初始化变量感到困惑 看下面的例子 Widget makeWidget Widget w return w Widget w1 makeWidget 这里我假设没有 RVO 即
  • 如何解决“HTTP 错误 404.3 - 未找到”错误?

    简单的问题 我启动 VS2008 并创建一个新的 WCF 服务应用程序 这将创建一个默认应用程序 并使用一些测试方法来显示它的工作原理 我按 CTRL F5 确实有效 伟大的 但是 它使用 Visual Studio 开发服务器 我不想支持
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 如何在 Xamarin.Forms 中强制使用浅色模式?

    我的应用程序的 UI 设计为在灯光模式下使用 但如果手机的默认主题是深色模式 我的应用程序也会切换到深色模式 并且 UI 看起来很垃圾 所以我想强制我的应用程序使用灯光模式 我怎样才能做到这一点 In my app xaml我使用的文件Us
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • 提高 ASP.NET/C# 编译速度的最佳方法是什么?

    更新 请将您的答案集中在硬件解决方案上 您使用什么硬件 工具 插件来提高 ASP NET 编译和首次执行速度 我们正在寻找固态硬盘来加快速度 但现在价格确实很高 我现在有两个 RAID 0 的 7200 rpm 硬盘 但我对性能不再满意 所
  • 在 Asp.net Web API 中处理 CORS 预检

    我的架构中有三个应用程序 它们位于同一服务器上 但具有不同的端口号 A Token Application port 4444 Asp net WebApi B API Application port 3333 Asp net WebAp
  • 如何在 .NET 6.0 中使用最小 Api 配置 Newtonsoft Json

    I have net6 0具有最少 api 的项目 我想使用NetwtonsoftJson而不是内置的System Text Json用于序列化和反序列化的库 目前我有这个配置JsonOptions并且按预期工作 builder Servi
  • 为什么这是一个未定义的行为?

    我的回答这个问题 https stackoverflow com q 18706587 845092这个函数是 inline bool divisible15 unsigned int x 286331153 2 32 1 15 40086
  • 宏中 do { } while(0) 与 ({ }) 的优点?

    Stack Overflow 上有很多关于使用的问题do while 0 在宏中 但这有点不同 我明白为什么do while 0 用于将多行代码包装在宏扩展中 但我经常看到另一种形式 The form 的优点是它是一个表达式并且可以有 返回
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • C# 中的自定义按钮:如何删除悬停背景?

    我正在尝试使用 Visual Studio 2005 对我的表单 其 FormBorderStyle none 执行自定义按钮 我在链接到该按钮的 ImageList 中有我的 3 种状态按钮图像 this btnClose AutoSiz
  • 如何将 typedef 结构传递给函数?

    此刻我正在努力 void avg everything 但这给了我错误 error subscripted value is neither array nor pointer 当我今天早些时候收到此错误时 这是 因为我没有正确地将 2D
  • OpenMP 动态调度与引导调度

    我正在研究 OpenMP 的调度 特别是不同的类型 我了解每种类型的一般行为 但澄清一下何时进行选择会很有帮助dynamic and guided调度 英特尔的文档 https software intel com en us articl
  • GridView,在代码中添加标题行第 2 部分

    这是这篇文章的延续 但添加了完整的代码 ASP NET GridView 在代码中添加标题行 https stackoverflow com questions 19119004 asp net gridview adding header
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • 如何让c代码执行hex机器代码?

    我想要一个简单的 C 方法能够在 Linux 64 位机器上运行十六进制字节码 这是我的 C 程序 char code x48 x31 xc0 include
  • 如何为单个函数设置 ICC 属性“fp-model precision”,以防止关联优化?

    我正在实施卡汉求和 http en wikipedia org wiki Kahan summation algorithm 在支持 gcc47 gcc48 clang33 icc13 和 icc14 编译的项目中 作为该算法的一部分 我想
  • XslCompiledTransform 和自定义 XmlUrlResolver:“具有相同键的条目已存在”

    有没有办法调试由自定义 XmlUrlResolver 从数据库加载的 XSLT 文档 或者有人知道下面的错误消息是关于什么的吗 我有一个导入通用 xslt 文档的 XSLT 样式表

随机推荐

  • Postgresql - 加密 jsonb 数据

    我的 postgres 表中有一个 jsonb 列 用于存储 json 数据 我想以加密格式存储数据并能够查询并获取纯文本值 有办法做到吗 Use the pgcrypto https www postgresql org docs cur
  • 处理序列中的每一对

    我正在寻找一种简洁的方法来处理 NET 中序列中的每对 无序 元素 我知道我可以用嵌套来做到这一点for循环 但我一直在寻找更具可读性的东西 我正在想象类似修改过的东西Any 扩展方法 IEnumerable
  • C# 在下一行之前等待或暂停 X 秒

    我想找出执行以下操作的最佳方法是什么 我有一个与 httpwebrequest 一起使用的控制台应用程序 在我的应用程序的某些部分我想这样做 agent GetURL http site com etc Wait for 8 16 Seco
  • 在 IOS 中单击时更改按钮文本颜色

    我知道这个问题经常被问到 并且许多答案都是正确的 我的代码中遇到了问题 我有单选按钮 当用户单击按钮时 背景颜色和文本颜色会发生变化 背景颜色按我的预期更改 但单击按钮时文本颜色变为蓝色区域 我已将其编码为在单击时更改白色 但是当我单击按钮
  • 将 Map key 反序列化为 POJO 引用

    Jackson 是否可以从给定 id 的相同 json 字符串中获取对先前反序列化对象的引用 例如 我有以下 Java 类 public class Company List
  • 将 iPhone 应用程序上传到 AppStore 的步骤

    我想知道将我的 iPhone 应用程序上传到 AppStore 的基本步骤 如何使用证书创建配置文件以及上传应用程序还需要执行哪些其他设置 我刚刚使用 Xcode 和 iPhone SDK V2 2 1 在 iMac 上制作了一个应用程序
  • 所有方法都返回“.autoNumeric 不是函数 - 无法取消数字格式”

    我试图获取使用 autoNumeric 格式化的输入数字的原始值 但不能 因为我尝试执行此操作的每种方法都会返回 autoNumeric 不是函数 在控制台中 document ready function new AutoNumeric
  • 使用Android GPS检测并与其他手机连接

    所以我昨天问了类似的问题 并且确实收到了我的问题的答案 但是我真的认为我问得不正确 因此没有收到我需要的确切信息 我正在寻找 API 一些开源代码 甚至只是其他人在 Android 上实现这一目标的方法 我正在制作一个应用程序 需要查找指定
  • 为什么Python中没有len(file)?

    我对 Python 并不陌生 但我仍然很难理解是什么让某些东西变得 Pythonic 反之亦然 如果这是一个愚蠢的问题 请原谅我 但是为什么我不能通过执行 len file 来获取文件的大小 file len 甚至没有实现 所以它不像其他东
  • 过度使用 If else 语句

    我有一个查询 那就是我使用了一种方法 但是我很多次使用了 If Else 不是它变得非常含糊 请建议我也可以使用其他条件循环吗 下面是我的代码 if cardType AARP CARD TYPE userResponse messageB
  • HBase:创建多个表或包含多个列的单个表?

    什么时候创建多个表而不是创建具有大量列的单个表才有意义 据我了解 表通常只有几个列族 1 2 每个列族可以支持 1000 多个列 当 HBase 似乎在单个表中可能存在大量列时表现良好时 什么时候创建单独的表才有意义 在回答问题本身之前 让
  • SQL查询求和

    我有两张桌子 Unit Unit id Unit name Unit cost 成分 Component id Component name Unit id 它们通过以下方式连接在一起Unit id Unit id 1有名字Unit 1 N
  • DurandalJS 路由行为

    我拥有的 试图了解发生了什么以及如何控制它 我对尚未经过身份验证的用户有一个 公共 视图 对经过身份验证的用户有一个 主页 视图 这是我的路线配置 app start then function Replace viewmodels in
  • Golang 函数指针作为结构的一部分

    我有以下代码 type FWriter struct WriteF func p byte n int err error func self FWriter Write p byte n int err error return self
  • 选择特定时间范围内 datetime64[ns] 类型的观察

    我有一个熊猫数据框 dfnew 其中一列 时间戳 是datetime64 ns 类型 现在我想查看特定时间范围内有多少观测值 比如说 10 00 00 到 12 00 00 dfnew timestamp dfnew timestamp a
  • 英特尔 SGX 开发者许可和开源软件

    是否可以获得许可的开发人员证书 用于在生产模式下签署经过安全审查 社区开发的开源 SGX 软件二进制文件 并将其发布到 apt 或 rpm 等开源存储库上 我刚刚询问了Intel SGX团队 他们说只有经过验证的供应商才能获得证书并在生产模
  • socket.io - 发送对象必须使用 JSON

    我在前端有一个对象 我想将它广播到所有连接的客户端 我可以按照我定义的方式将其作为纯粹的对象发送吗 或者我总是必须在发送之前将其字符串化为 JSON 对象 我的对象 var myBox x 400 y 700 w 231 h 199 c r
  • 无法使用 git 扩展加载我的私钥

    过去2小时我一直在努力 我使用 xp dev 作为 git 存储库提供程序 因为我已经付款并且那里有 svn 存储库 我已经给了 xp dev 我的公钥 但是当克隆我的仓库时 我被拒绝了 C Program Files x86 Git bi
  • Angular 4:如何观察对象的变化?

    ETA 我知道有多种方式可以观看我的form进行更改 这不是我想做的 正如标题所示 我问的是如何监视object 下面显示的应用程序仅用于说明目的 请回答我提出的问题 谢谢 我有这个简单的应用程序 import Component OnIn
  • 使用shared_ptr的例子?

    你好 我今天问了一个关于如何在同一个向量数组中插入不同类型的对象 https stackoverflow com questions 3475030 different types of objects in the same vector