智能指针c++11(为什么 C++ 11 标准不加入 GC 功能)

2024-07-22 11:55:22 1

智能指针c++11(为什么 C++ 11 标准不加入 GC 功能)

本篇文章给大家谈谈智能指针c++11,以及为什么 C++ 11 标准不加入 GC 功能对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

为什么 C++ 11 标准不加入 GC 功能

C++未提供语言层面的GC,但是其智能指针std::shared_ptr本质上就是基于引用计数的GC。只要避免循环引用,就跟其他语言的GC一样强大了,并且可控性较高。

c++智能指针有哪些

在C++编程中,智能指针绝对是很强大的用法,boost库里把这些指针用的出神入化,它可以简化程序员写代码的复杂度,不用去考虑代码分支路径导致的遗漏delete语法,也无须担心冗余delete导致的double free问题。但是,便利性也要求程序猿熟悉各种指针的用法,避免误用,反而带来其他问题。下面简要列下常用的智能指针,及其用法:1.scoped_ptr:这是最常用的智能指针,当你new一块内存后,把内存地址交给scoped_ptr管理,这样就不用显式调用delete了,当离开作用于后,该内存会被自动释放,如int* p = new int;scoped_ptr《int》 scoped_int_ptr(p);注意:无须再delete p;这样会double free。另外一个重要的点是:scoped_ptr不允许传递指针,即他的拷贝构造和赋值函数都是private的,不允许调用,所以你不能写如下代码scoped_ptr《int》 scoped_int_ptr2 = scoped_int_ptr; // 不允许2.auto_ptr:它和scoped_ptr用法基本是一致的,但是它允许指针传递,拷贝构造和赋值函数允许调用,故名思意,当发生赋值时,原对象的指针会转移给新对象,这时原对象的指针就为NULL了,不能再调用。所以,对指针要把握好,使用应谨慎。3.shared_ptr:scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象。但是,shared_ptr注意不要有循环引用,否则会出现内存泄漏。例如:A和B对象互相引用,它们的引用计数都是1,当出了作用域之后,二者不能自动释放,出现了内存泄漏。4.weak_ptr:是一种智能指针,它对被 std::shared_ptr 管理的对象存在非拥有性(“弱”)引用。在访问所引用的对象前必须先转换为 std::shared_ptr。std::weak_ptr 用来表达临时所有权的概念:当某个对象只有存在时才需要被访问,而且随时可能被他人删除时,可以使用std::weak_ptr 来跟踪该对象。需要获得临时所有权时,则将其转换为 std::shared_ptr,此时如果原来的std::shared_ptr 被销毁,则该对象的生命期将被延长至这个临时的 std::shared_ptr 同样被销毁为止。此外,std::weak_ptr 还可以用来避免 std::shared_ptr 的循环引用。

C++ 智能指针在什么时候使用

所属头文件:#include 《memory》所属命名空间及标识符:using std::shared_ptr;所属版本:C++98g++启用版本命令:g++ -std=c++98 -c -o补充: 如果启用c++11及以上标准,即g++ -std=c++11 -c -o,编译时会有一个警告信息提示warning:‘auto_ptr’ is deprecated (‘auto_ptr‘被反对使用) 存在很多种智能指针,其中最有名的应该是C++98标准中的“自动指针”std::auto_ptr,它部分解决了获取资源自动释放的问题,例如:#include 《memory》#include 《iostream》#include 《string》using std::cin;using std::cout;using std::string;using std::auto_ptr;class Report{private: std::string str;public: Report( const string s ):str(s) { cout 《《 "Object created!\n"; } ~Report() { cout 《《 "Object deleted!\n"; } void comment(string owner) const { cout 《《 owner 《《 str 《《 "\n"; }};int main(void){ auto_ptr《Report》 ps (new Report("Using auto_ptr.")); ps-》comment(string("ps:")); auto_ptr《Report》 p1; p1 = ps; //赋值完毕后ps已经失去对内存对象的所有权,不可再使用 p1-》comment(string("p1:")); //ps-》comment(string("after p1=ps:")); //error,Segmentation faul}/*Result:Object created!Using auto_ptr.Object deleted!*/ auto_ptr的构造函数接受new操作符或者对象工厂创建出的对象指针作为参数,从而代理了原始指针。虽然它是一个对象,但因为重载了 operator*后operator-》,其行为非常类似指针,可以把它用在大多数普通指针可用的地方。当退出作用域时(离开作用域或异 常),C++会保证auto_ptr对象销毁,调用auto_ptr的析构函数,进而使用delete操作符删除原始指针释放资源。 auto_ptr很好用,被包含在C++标准库中令它在世界范围内被广泛使用,使用智能指针的思想、用法深入人心。但标注库没有覆盖智能指针的全部领域,尤其最重要的引用计数型智能指针。

c++11智能指针对性能影响大吗

我喜欢新的C ++ 11智能指针。在很多方面,他们是为godsent恨谁管理自己的记忆很多人。在我看来,它使教学C ++新人容易得多。However, in the two plus years that I’ve been using them extensively, I’ve come across multiple cases where improper use of the C++ 11 smart pointers made the program inefficient or simply crash and burn. I’ve catalogued them below for easy reference. 然而,在我使用它们广泛地被两个多年,我已经遇到许多情况下,不当使用C ++ 11智能指针所生成的程序效率低下或者干脆和好如初。我下面编目他们,以供参考。

C++11中类自己释放shared_ptr类型成员吗

是的,shared_ptr指针指向的堆内存会自动释放。C++11引入了3种智能指针,分别是:shared_ptr、unique_ptr、weak_ptr。它们实际上都是模板类,其堆内存在某一合适的时候会自动释放。但需要注意以下几点:1不能用同一个指向堆内存的普通指针创建多个shared_ptr指针2unique_ptr指针的引用计数始终为13weak_ptr指针不影响引用计数且只能和shared_ptr指针配合使用4要使用这3种指针,需#include《memory》using namespace std;

c++的c++11标准

  c++11标准由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布 ,并于2011年9月出版。2012年2月28日的国际标准草案(N3376)是最接近于C++11标准的草案(仅上的修正)。此次标准为C++98发布后13年来第一次重大修正。  1.对C++核心语言的扩充  2.核心语言运行期的强化(右值引用和 move 语义;泛化的常数表达式;对POD定义的修正)  3.核心语言建构期表现的加强(外部模板)  4.核心语言使用性的加强(初始化列表;统一的初始化;类型推导;以范围为基础的 for 循环;Lambda函数与表示法;另一种的函数语法;对象构建的改良;显式虚函数重载;空指针;强类型枚举;角括号;显式类型转换;模板的别名;无限制的unions)  5.核心语言能力的提升(变长参数模板;新的字符串字面值;用户自定义的字面值;多任务存储器模型;thread-local的存储期限;使用或禁用对象的默认函数;long long int 类型;静态assertion;允许sizeof运算符作用在类型的数据成员上,无需明确的对象;)  6.C++标准程序库的变更(标准库组件的升级;线程支持;多元组类型;散列表;正则表达式;通用智能指针;可扩展的随机数功能;包装引用;多态函数对象包装器;用于元编程的类型属性;用于计算函数对象返回类型的统一方法)

C++|深入理解智能指针

It’s often the case that you’ll need something that behaves like a pointer, but a built-in pointer type just doesn’t do the job. In those cases, a C++ programmer will use a “smart pointer. ” 我们经常遇到这样的情形:需要某种类似指针的东西,但内建的指针又做不了我们想要做的事情。在这些情形下,C++程序员可以使用一个“智能指针” 。 A smart pointer is a class type that is tricked up to look and act like a pointer but that provides additional capability beyond that provided by a built-in pointer. Generally, a smart pointer uses the capabilities provided by a class’s constructors, destructor, and copy operations to control access to or keep track of what it points to in a way that a built-in pointer cannot. 智能指针是一个类类型,它乔装打扮成一个指针,但额外提供了内建指针所无法提供的能力。通常而言,一个智能指针通过使用类的构造函数、析构函数和复制操作符所提供的能力,来控制(或跟踪)对它所指向的东西的访问,而内建指针在这方面则无能为力。所有智能指针都重载 -》 和* 操作符,从而可以采用标准指针语法来使用它们(一些罕见的智能指针甚至还重载了-》* 操作符)。 All smart pointers overload the -》 and * operators so that they can be used with standard pointer syntax. (Some rare specimens even go so far as to overload the -》* operator; ) Other smart pointers (in particular, smart pointers used as STL iterators) overload other pointer operators, like ++, --, +, -, +=, -=, and . Smart pointers are often implemented as class templates so that they may refer to different types of objects. Here’s a very simple smart pointer template that performs a check that it’s not null before use: 另有一些智能指针(尤其是用作STL迭代器的指针)还重载了其他一些指针操作符,包括++、--、 、-、+=、-=以及等。智能指针通常采用类模板来实现,从而使它们可以指向不同类型的对象。下面是一个非常简单的智能指针模板,它执行一个检查, 确保在被使用之前不为空: Use of a smart pointer should be straightforward, mimicking the use of a built-in pointer: 智能指针的用法非常简单,酷似内建指针的用法: The key to this facede is the overloaded operator -》. The -》 operator must be overloaded as a member and has a rather unusual property in that it is not “consumed” when it is called. In other words, when we write s-》draw(), the compiler recognizes that s is not a pointer but a class object with an overloaded operator -》 (that is, that s is a smart pointer). This results in a call to the member overloaded operator, which returns (in this case) a Shape * built-in pointer. This pointer is then used to call Shape’s draw function. If you write this out longhand, you’ll get the following challenging expression: (s. operator -》())-》draw(), which contains two uses of the -》 operator, one overloaded, one built in. 在这个用法外表之下的关键点在于重载的operator-》, 此操作符必须被重载为一个成员函数,并且具有一个非同寻常的性质,即当它被调用时,它并不被消耗掉(consumed),换句话说, 当我们写s-》draw()时, 编译器识别出s不是一个指针, 而是一个重载了operator-》的类对象(即s是一个智能指针)。这将导致对成员重载的操作符的调用,本例中返回一个Shape*内建指针。然后该指针被用于调用Shape的draw函数。如果采用普通写法来编写代码,将会得到如下具有挑战性的表达式(s.operator-》())-》draw(), 其中包含了两个-》操作符,一个是重载的版本,另一个是内建的版本。 Smart pointers also typically overload operator * as well as operator -》 so that they may be used to refer to nonclass types. 除了重载operator-》外,智能指针通常还重载operator *, 从而可以用它们指向不是类的类型,如下所示: Smart pointers are used pervasively in C++ programming, from resource handles to STL iterators, to reference counting pointers, to wrappers around pointers to member functions, and on and on. 智能指针在C++编程中广泛使用,从资源句柄到STL迭代器,再到引用计数指针,再到围绕成员函数的指针的包装器,等等。 ref 《C++ COMMON KNOWLEDGE: ESSENTIAL INTERMEDIATE PROGRAMMING》

c++智能指针有哪几种

C++提供了4种智能指针用于对分配的内存进行自动释放,这些智能指针如下:auto_ptr、unique_ptr、shared_ptr、weak_ptr。其中auto_ptr在C++98标准引入,后三种在C++11标准中加入。而auto_ptr已经被C++11所摒弃,建议使用后三种智能指针,这4种智能指针使用模板(template)实现。

c++11智能指针(一) shared_ptr

智能指针是存储动态分配对象指针的类,用于生命周期的控制。当指针离开其作用域时,自动销毁动态分配的空间,防止内存泄漏。 使用智能指针需要包含头文件#include《memory》 std::shared_ptr采用引用计数,每一个shared_ptr的拷贝都指向相同的内容,当最后一个shared_ptr析构的时候,内存被释放 当使用shared_ptr删除数组时,需要指定删除器 常用的写法有以下几种

C++智能指针的几种用法

一、auto_ptr模板  auto_ptr与shared_ptr、unique_ptr都定义了类似指针的对象,可以将new到的地址赋给这一对象,当智能指针过期时,析构函数会调用delete函数,对象将被销毁,由此内存可以自动被释放。二、shared_ptr模板  先看代码:auto_ptr p1 (new string("hello world!");auto_ptr p2;p2 = p1;   在以上代码中,p1与p2指向同一对象,常规指针在释放内存时,系统会尝试删除同一对象两次。在auto_ptr中,对象的所有权会归于p2,p1将会变为野指针。shared_ptr则允许多个指针指向同一个对象,每多一个指针指向,计数器就会+1,同样在释放的时候,当数值减为0的时候即最后一个指针过期的时候才会调用delete函数。三、unique_ptr模板  同样为了避免多个指针指向,unique_ptr严格了所有权的概念,即我的就我的,不允许他人指向(如代码段二中,采用unique_ptr将会报错,而原代码会编译通过但可能造成崩溃)。四、总结  需要多个指针指向一个对象时可使用shared_ptr,如指针数组。不需要多个指针指向一个对象可使用uniq_ptr,uniqu_ptr比auto_ptr更加安全(编译报错远比程序崩溃好得多)。

文章分享结束,智能指针c++11和为什么 C++ 11 标准不加入 GC 功能的答案你都知道了吗?欢迎再次光临本站哦!

智能指针c++11(为什么 C++ 11 标准不加入 GC 功能)

本文编辑:admin
智能指针c++11 ,不

更多文章:


泽诺尼亚4中文版(有什么事情是去格鲁吉亚才知道的)

泽诺尼亚4中文版(有什么事情是去格鲁吉亚才知道的)

本文目录有什么事情是去格鲁吉亚才知道的泽诺尼亚4中文内购破解版泽诺尼亚4的游戏评测泽诺尼亚4中文破解版,我一进去就黑屏然后闪退怎么回事泽诺尼亚4中文版,我的德鲁伊57去pvp,所有属性点都加了智力,攻击才不到4000,但是有63级的攻击都2

2024年7月2日 05:26

defense(defence和defense有什么区别 名词意思上有什么区别)

defense(defence和defense有什么区别 名词意思上有什么区别)

大家好,defense相信很多的网友都不是很明白,包括defence和defense有什么区别 名词意思上有什么区别也是一样,不过没有关系,接下来就来为大家分享关于defense和defence和defense有什么区别 名词意思上有什么区

2024年7月3日 16:11

游戏机模拟器(什么是模拟器)

游戏机模拟器(什么是模拟器)

大家好,如果您还对游戏机模拟器不太了解,没有关系,今天就由本站为大家分享游戏机模拟器的知识,包括什么是模拟器的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录什么是模拟器掌上游戏机的模拟器与台式机的模拟器一样吗游戏模

2024年5月28日 22:06

收件箱修复工具(如何在Outlook中查找并运行“收件箱修复工具”)

收件箱修复工具(如何在Outlook中查找并运行“收件箱修复工具”)

本文目录如何在Outlook中查找并运行“收件箱修复工具”如何修复损坏的OST文件outlook.pst文件怎么修复如何使用scanpst.exe修复outlook如何使用收件箱修复工具恢复 Outlook 中的电子邮件如何在Outlook

2024年6月29日 06:42

求三国志孔明传下载地址就是和曹操传差不多的那一款游戏,我以前只在PS上面玩过的?三国孔明传的下载地址

求三国志孔明传下载地址就是和曹操传差不多的那一款游戏,我以前只在PS上面玩过的?三国孔明传的下载地址

本文目录求三国志孔明传下载地址就是和曹操传差不多的那一款游戏,我以前只在PS上面玩过的三国孔明传的下载地址求个三国志孔明传的下载地址谢谢了,大神帮忙啊请高手速度给我一个能修改的修改器和的下载地址~~~速度 谢谢哪里可以下载三国孔明传啊!HE

2024年6月27日 09:11

lol狗头天赋(LOL狗头怎么加点)

lol狗头天赋(LOL狗头怎么加点)

本文目录LOL狗头怎么加点lol狗头怎么玩厉害英雄联盟:“光环流”狗头怎么玩lol狗头打野的符文,天赋,出装LOL狗头怎么加点LOL狗头加点方式如下:1、狗头前期最好是打野。自身就会吸血,而且还能给单线的队友带来等级优势。 符文可以选择:3

2024年7月6日 09:44

极品飞车21怎么下载(极品飞车21双击没反应)

极品飞车21怎么下载(极品飞车21双击没反应)

这篇文章给大家聊聊关于极品飞车21怎么下载,以及极品飞车21双击没反应对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录极品飞车21双击没反应极品飞车21m3gtr怎么获得极品飞车21热度手机可以下载吗极品飞车21平板能玩吗怎样

2024年7月20日 04:30

日本西班牙直播(求男蓝世界锦标赛CCTV5电视转播表)

日本西班牙直播(求男蓝世界锦标赛CCTV5电视转播表)

本篇文章给大家谈谈日本西班牙直播,以及求男蓝世界锦标赛CCTV5电视转播表对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录求男蓝世界锦标赛C

2024年5月28日 07:46

暴风影音官方下载电脑版暴风影音(暴风影音怎么下载老版本)

暴风影音官方下载电脑版暴风影音(暴风影音怎么下载老版本)

今天给各位分享暴风影音怎么下载老版本的知识,其中也会对暴风影音怎么下载老版本进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录暴风影音怎么下载老版本电脑上如何下载安装暴风影音“暴风影音”在哪里可以下载暴风影音怎么

2024年6月22日 06:30

蜘蛛侠模拟器游戏下载(能说奥特曼格斗进化3蜘蛛侠版模拟器在哪下载)

蜘蛛侠模拟器游戏下载(能说奥特曼格斗进化3蜘蛛侠版模拟器在哪下载)

各位老铁们好,相信很多人对蜘蛛侠模拟器游戏下载都不是特别的了解,因此呢,今天就来为大家分享下关于蜘蛛侠模拟器游戏下载以及能说奥特曼格斗进化3蜘蛛侠版模拟器在哪下载的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录能

2024年3月31日 04:46

土豆视频直播怎么下载(potato土豆直播app怎么下载)

土豆视频直播怎么下载(potato土豆直播app怎么下载)

各位老铁们,大家好,今天由我来为大家分享土豆视频直播怎么下载,以及potato土豆直播app怎么下载的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录

2024年8月12日 13:10

有哪些好看的灵异小说推荐?李达的《鬼藏人》好看吗

有哪些好看的灵异小说推荐?李达的《鬼藏人》好看吗

本文目录有哪些好看的灵异小说推荐李达的《鬼藏人》好看吗有没有关于动物成仙的精彩故事分享一个灵异猎人的配音演员是关于一所妖怪学校的动漫有哪些好看的灵异小说推荐对灵异小说,我喜欢的,还是蒲老先生的大作。《聊斋》让人惊中有恐,恐里藏情。给那些小晶

2024年3月3日 10:45

守护甜心游戏攻略

守护甜心游戏攻略

本文目录守护甜心游戏攻略守护甜心游戏攻略 8824 フェザーストローハット 3229 ブロックチェックキップ 5833 あかいしたぶちのメガネ 5396 あおいこうきゅうなカップ 1192 ハイクロスペアチョーカー 4473 ざんのノートパ

2024年6月15日 18:38

google 404(谷歌软404是什么意思)

google 404(谷歌软404是什么意思)

本文目录谷歌软404是什么意思电脑出现google.cifenqi.com上的网页显示;404是什么意思超凡先锋电脑版谷歌登陆出现错误代码404个怎么办nginx 反向代理 google,出现 404,怎么破谷歌软404是什么意思在谷歌管理

2024年7月23日 23:14

电脑单机游戏、可玩性高点的、能存档的、6G以内的^_^?勿忘我打不开一打开就出现这个图是怎么回事啊

电脑单机游戏、可玩性高点的、能存档的、6G以内的^_^?勿忘我打不开一打开就出现这个图是怎么回事啊

本文目录电脑单机游戏、可玩性高点的、能存档的、6G以内的^_^勿忘我打不开一打开就出现这个图是怎么回事啊谁给我个哈利波特3PC单机完美通关存档,重谢!勿忘我游戏,WIN7存档位置在哪急求,要详细勿忘我存档损坏,下载的补丁不会用,游民星空的勿

2024年6月25日 11:36

免费的pdf编辑器(免费的pdf编辑器哪个好)

免费的pdf编辑器(免费的pdf编辑器哪个好)

其实免费的pdf编辑器的问题并不复杂,但是又很多的朋友都不太了解免费的pdf编辑器哪个好,因此呢,今天小编就来为大家分享免费的pdf编辑器的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录免费的pdf编辑器哪个好不

2024年6月22日 15:20

pokemon go 中国(为什么中国不能pokemon go)

pokemon go 中国(为什么中国不能pokemon go)

本文目录为什么中国不能pokemon gopokemonGO中国区能玩吗 口袋妖怪GO目前并未锁区地区一览为什么有人说任天堂全球大火的《pokemongo》在中国却败给了腾讯的《一起来捉妖》为什么中国不能pokemon go在中国不能上架的

2024年7月24日 16:04

手机游戏修改器(手机游戏修改器怎么用)

手机游戏修改器(手机游戏修改器怎么用)

今天给各位分享手机游戏修改器怎么用的知识,其中也会对手机游戏修改器怎么用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录手机游戏修改器怎么用手机单机游戏修改器,有哪些手机游戏单机版 不需要root的游戏修改器有

2024年8月4日 11:21

迅雷下载时打开网页缓慢或无法打开怎么办?迅雷网络是用来干嘛的

迅雷下载时打开网页缓慢或无法打开怎么办?迅雷网络是用来干嘛的

大家好,今天小编来为大家解答以下的问题,关于迅雷网络,迅雷下载时打开网页缓慢或无法打开怎么办这个很多人还不知道,现在让我们一起来看看吧!本文目录迅雷下载时打开网页缓慢或无法打开怎么办迅雷网络是用来干嘛的网速很好,但是迅雷无法下载东西是怎么回

2024年7月2日 00:15

谁有忍者小英雄的资料?忍者必须死3怎样换英雄

谁有忍者小英雄的资料?忍者必须死3怎样换英雄

本文目录谁有忍者小英雄的资料忍者必须死3怎样换英雄火影忍者怎么赚英雄谁有忍者小英雄的资料《忍者小英雄》 中文翻译是忍者小英雄,日文好象又叫伊贺里忍者,作者(女)亚月裕,少女漫画作家,主角全名是忍雄伊加诺,小名叫小雄,爷爷叫赛祖,曾收留年幼丧

2024年6月27日 13:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索