C++学习笔记
文章平均质量分 79
GKxx
这个作者很懒,什么都没留下…
展开
-
关于 VLA,它有问题,但也不是一无是处
关于 VLA 的影响、好处和坏处。原创 2023-02-25 23:41:46 · 2532 阅读 · 1 评论 -
在friend中让std::make_shared使用private构造函数
众所周知在创建std::shared_ptr对象的时候,我们总是应该优先选择std::make_shared而非手动地用new。《Effective Modern C++》中提到了若干种std::make_shared不奏效的情况,主要是如下几种:make系列函数不支持定制deleter大括号初始化物无法被完美转发由于weak_ptr的存在导致控制块和对象所占的内存被延迟释放在实际操作中,我们还遇到了一种特殊的情况:假设有一个类Widget的构造函数是private的,我们想在它的friend函原创 2022-05-13 15:30:34 · 1620 阅读 · 0 评论 -
C++ operator new 和 placement-new 笔记
当我们在C++中写出一条new表达式时,它的执行分为两步:分配所需的内存在分配的内存上构造对象这两步中,C++允许我们控制的是第一步,第二步是我们无法控制的。默认情况下,如果用new创建单个对象,第一步会调用一个默认版本的名为operator new的函数;如果是用new[]创建“动态数组”,那么第一步调用的是默认版本的名为operator new[]的函数。它们的声明如下:// operator new/new[] are not inlined// not in any namespace原创 2022-05-11 14:29:00 · 617 阅读 · 0 评论 -
关于C字符串的一个陷阱
关于C字符串的一个陷阱今天有小伙伴来问了我一个挺有趣的问题,正好最近在读的《C++ 沉思录》在开头谈到“为什么用C++”的时候也提到了这一点,于是决定写一篇笔记。注:笔者水平有限,如有错误欢迎指出,不胜感激。众所周知,C语言中是没有真正的“字符串”的,我们不能像在Python或者C++中那样很方便地使用str或者std::string来处理字符串,而只能用以空字符'\0'结尾的字符数组来假装一个字符串。这种字符串最大的问题在于,它将拷贝控制和内存管理这两件棘手的工作完全交给了用户。不妨考虑一个“切片原创 2020-11-03 16:13:26 · 283 阅读 · 1 评论