- 博客(15)
- 收藏
- 关注
原创 C++ new和delete的定制化设计
1.new_handler的声明。当operator new抛出异常以反映一个未获满足的内存需求之前,会先调用客户制定的错误处理函数,所谓的new-handler。new_handler是一个typedef,定义出一个指针指向函数。set_new_handler函数是一个传入参数为new_handler,返回为new_handler的函数,后面的throw是一份异常明细,表示该函数不抛出任何异常。set_new_handler方法的简单使用过程,在无法分配足够空间时,会调用我们指定的函数。
2023-12-25 23:18:40
53
原创 C++模板与泛型编程
1.在未使用template方法时,以下代码去除template可以通过编译。以下代码无法通过编译的原因在于编译器不知道我们想要调用哪个函数,在模板函数时,为了确定是哪个函数,需要知道模板T是什么,但是以下代码中,如果以类型为Rational的oneHalf开始推导,能够推导出T为int,但是传递给该函数的第二个参数却直接是int类型,非Rational类型,而template实参推导过程中从不将隐式类型转换函数纳入考虑(只有在知道了函数存在的时候,才进行隐式类型转换)。public:...
2023-12-25 23:12:22
93
原创 C++资源管理问题
问题:使用对象时我们需要及时的delete,但是可能在函数中途,发生异常时,将导致该对象来不及回收解决方法1:同通过对象来进行管理,使用RALL方法(资源取得实际便是初始化时机)1.auto_ptr,是一个类指针对象,也就是智能指针,通过该指针指向的对象,会经由auto_ptr的析构函数进行自动删除但是auto_ptr有个独特性质,如果通过copy构造函数或copy assignment操作符,它们会变成null,而复制所得的指针将取得资源的唯一拥有权。
2023-12-20 23:22:25
50
1
原创 部分方法的实现设计问题
1.跳过毫无意义的default构造过程2.for循环过程,在以下方法中定义于循环外,将造成1次构造,1次析构,n次赋值运算。构造于循环内,将构造n次构造,n次析构。主要根据其中的赋值运算消耗进行运算。
2023-12-20 23:21:34
42
1
原创 接口、类、函数的设计问题
1.接口应该让客户使用时,如果未得到预期行为,该代码不该通过编译,如果通过了编译,应该得到客户所想要的行为。以下代码中,用户可能会使用错误的顺序,或者是使用错误超出范围的值。2.shared_ptr虽然比原始指针大且慢,但是这额外的执行成本并不显著,降低客户错误的成效是更加显著的。
2023-12-20 23:20:42
39
1
原创 C++的继承与面向对象设计学习
1.non-virtual函数是静态绑定的,在以下代码中,如果class D中也声明了mf()函数的话,pB虽然是一个指向Dclass的指针,但是确因为其是一个pointer-to-B,所以调用B里的mf(),pD->mf调用D里的mf()。D x;B* pB = &x;pB->mf();D* pD = &x;pD->mf();2.virtual函数是动态绑定的,可以根据指针指向的对象来进行函数的选择,
2023-12-20 23:19:24
34
1
原创 C++宏定义相关
define又称宏定义,标识符为所定义的宏名,简称宏。标识符的命名规则与前面讲的变量的命名规则是一样的。变量名表示的是一个变量,但宏名表示的是一个常量。C语言程序从编写到运行要经过预处理、编译、汇编和链接这 4 个阶段,但大多数人习惯将前 3 个阶段统称为编译阶段,所以才有了“程序要经过编译和链接后才能运行”的说法。预编译不是编译,而是编译前的处理,编译器正式开始编译程序之前,会执行一段预处理程序(又称预处理器)专门对程序执行预处理操作。#define 和 #include 一样,也是以“#”开头的。
2023-12-20 23:18:39
23
1
原创 记录部分常用函数
gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就,破坏一个或多个不相关变量的值。
2023-12-20 23:17:53
23
1
原创 C++编译链接问题
3.声明式修改方法,把Person分割为两个classes,main class中只内含一个指针成员,指向其实现类(PersonImpl),这种设计常被称为pimpl idiom(Poiner to implementation),问题二:编译器必须在编译期间知道对象的大小,如下代码所示在编译器编译到Person p (params)时,需要知道Person的实现,但是如果可以按照声明式那样,不进行实现将会出现错误。class的定义式不只详细叙述了class接口,还包括十足的实现细目。
2023-12-20 23:16:52
28
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人