- 博客(28)
- 收藏
- 关注
原创 【复读EffectiveC++24】条款24:若所有参数皆需类型转换,请为此采用non-member函数
如果你需要为某个函数的所有参数(包括被this这孩子很所指的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member。
2024-07-30 23:18:17
864
原创 【复读EffectiveC++23】条款23:宁以 non-member、non-friend替换member函数
宁可拿非成员 非友元函数替换成员函数。这样做可以增加封装性、包裹弹性和机能扩充性。
2024-07-29 22:17:03
999
1
原创 【复读EffectiveC++22】条款22:将成员变量声明为private
切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微性划分访问控制、允许约束条件获得保证,并提供class作者以充分的实现弹性protected并不比public更具封装性。
2024-07-23 23:30:57
683
原创 【复读EffectiveC++21】条款21:必须返回对象时,别妄想返回其reference
绝不要返回指针/引用指向一个局部stack对象,或返回一个引用指向heap-allocated对象,或者返回一个引用/指针指向一个静态局部变量。条款4已经为“在单线程中合理返回引用指向一个静态局部变量”提供了一份设计实例。
2024-07-23 00:15:49
568
原创 【复读EffectiveC++20】条款20:宁以pass-by-reference-to-const替换pass-by-value
尽量以pass-by-reference-to-const替换pass-by-value。前者通常比较高效,并可避免切割问题;以上规则并不适用于内置类型,以及STL的迭代器和函数对象。对它们而言,传值调用往往比较合适。
2024-07-21 23:09:42
891
原创 【复读EffectiveC++19】条款19:设计 class 犹如设计 type
Class 的设计就是 type 的设计。在定义一个新的 type 之前,请确定你已经考虑过本条款覆盖的所有讨论主题。
2024-07-18 23:29:09
749
原创 【复读EffectiveC++17】条款17:以独立语句将newed对象置入智能指针
以独立语句将newed对象存储于(置于)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以觉察的资源泄漏。
2024-04-14 16:24:10
389
原创 【DirectX12从零渲染04】DirectX12 三角形的绘制
首先,需要我们先去定义一个三角形的基础数据结构,也就是确定具有那些基础属性,比如位置,比如颜色诚然,我们是不能直接将vertex buffer绑定到pipeline上,而需要使用descriptor,即在Dx12中使用由于是我们自己定义的结构体,必然是要提供一份“使用说明”给Dx12的。这个使用说明就是结构体。注意,这部分会与后面的shader部分的 hlsl文件 强关联。
2024-04-14 15:13:20
1416
2
原创 【复读EffectiveC++16】条款16:成对使用new和delete时要采取相同形式
如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]
2024-04-04 15:56:17
732
原创 【复读EffectiveC++15】条款15:在资源管理类中提供对原始资源的访问
APIs往往要求访问原始资源,所以每一个RAII类应该提供一个“取得其所管理的资源”的办法。对原始资源的访问可能经由显示转换或隐式转换。一般而言显示转换比较安全,但隐式转换对客户比较方便。
2024-03-24 23:16:47
552
原创 【复读EffectiveC++14】条款14:在资源管理类中小心拷贝行为
复制 RAII 对象必须一并复制它所管理的资源,所以资源的 copying 行为决定 RAII 对象的 copying 行为。普通而常见的 RAII class copying 行为是:抑制 copying、实行引用计数法。不过其他行为也都可能被实现。
2024-03-22 20:51:46
279
原创 【复读EffectiveC++13】条款13:以对象管理资源
为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源两个常被使用的RAII类分别是tr1::shared_ptr和auto_ptr(以抛弃不再使用)shared_ptr通常是较佳选择,因为其拷贝行为比较直观auto_ptr复制动作会使它(被复制对象)指向null
2024-03-21 23:22:30
379
原创 【复读EffectiveC++12】条款12:复制对象时勿忘其每一个成份
拷贝函数应该确保复制“对象内的所有成员变量”及“所有基类成份”。不要尝试以某个拷贝函数实现另一个拷贝函数。应该将共同技能放进第三方函数,并由两个拷贝函数共同调用。
2024-03-19 17:54:05
377
原创 【复读EffectiveC++11】条款11:在operator=中处理“自我赋值”
确保当前对象自我赋值时operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy=and-swap确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确
2024-03-17 23:41:58
249
原创 【复读EffectiveC++10】条款10:令operator= 返回一个 reference to *this
赋值操作运算符返回一个reference to *this。虽然这个建议不是强制性的,但是建议这么使用,例如所有内置类型和标准程序库的string、vector等都是这么遵守的。
2024-03-16 16:19:21
188
原创 【复读EffectiveC++09】条款09:绝不在构造和析构过程中调用virtual函数
在构造和析构期间不要调用 virtual 函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)
2024-03-15 23:22:14
447
原创 【复读EffectiveC++08】条款08:别让异常逃离析构函数
析构函数绝对不要抛出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕获并处理该异常。如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么类应该提供一个普通函数(而非在析构函数中)执行该操作。
2024-03-14 23:51:52
255
原创 【复读EffectiveC++07】条款07:为多态基类声明virtual析构函数
带多态性质的基类应该声明一个virtual析构函数或如果类带有任何virtual函数,也应该拥有一个virtual析构函数。类的设计目的如果不是作为基类使用,或不是为了具备多态性,那就不该声明virtual析构函数。
2024-03-13 23:25:14
568
原创 【复读EffectiveC++06】条款06:若不想使用编译器自动生成的函数,就该明确拒绝
为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用想Uncopyable这样的base class 也是一种做法。
2024-03-12 22:18:01
823
原创 【复读EffectiveC++05】条款05:了解 C++ 默默编写并调用哪些函数
编译器可以隐式地生成类的默认构造函数、拷贝构造函数、拷贝赋值运算符和析构函数。
2024-03-11 22:50:55
424
原创 【复读EffectiveC++04】条款04:确定对象被使用前已被初始化
1、为内置型对象进行手工初始化,因为C++不保证初始化它们。2、构造函数最好使用成员初始化列表,而不要再构造函数体内部做赋值操作。初始列列出的成员变量,其排列次序应该和它们在 class 中的声明次序相同。3、为免除“跨编译单元之初始化次序”问题,请以局部静态对象替换非局部静态对象。
2024-03-10 09:50:06
716
原创 【复读EffectiveC++03】条款03:尽可能使用const
条款02讲完了,条款03就针对02中提到的 const 关键字进行了用法上进行了拓展解释。
2024-03-09 23:18:26
907
原创 【复读EffectiveC++02】条款02:尽量以 const、enum、inline 代替 #define
老手视情况,新手就尽量别用 #define。
2024-03-08 22:22:12
855
原创 【复读EffectiveC++01】条款01:视 C++ 为一个语言联邦
作为整个书的开篇,几乎点明了整本书的基调,C++的繁复是有目共睹的,其麻烦的就在于多种特性的混杂,不断地迭代,打补丁,而想要成为优秀的C++开发者,全部了解,属实是在难为人,但总是要做到两个点:a、对语言的常用部分要了解到,会运用(避坑);b、交叉的部分要知道那些在什么情况下是最优解;这两点也是本书的主要在探讨的。
2024-03-07 17:08:24
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人