C++
track_down
这个作者很懒,什么都没留下…
展开
-
多态与泛型编程
1、多态的实现方式不只是面向对象,再很多动态语言里用所谓的鸭子类型实现多态 2、c++使用模板实现鸭子类型 为什么要有鸭子类型 鸭子类型可以使开发者不需要使用继承来实现一些约定,尤其对于混合了不同的来源不同的继承体系的对象。唯一的要求是这些对象有共通的成员函数,成员函数的参数类型不一定一样。 例如c++标准容器都有push_back()函数和size()函数, 都有begin()和end()函数,但是他们没有都继承相同的基类 3、如果模板再实例化时需要实例化特殊的变量类型函数,可以通过函数重载,模板特化或者原创 2020-07-07 16:21:44 · 335 阅读 · 0 评论 -
c++ decltype和auto的区别
auto 是一个值类型 auto& 是一个左值引用类型 auto&& 是一个转发引用类型(符合引种折叠逻辑) decltype(a) 是一个值类型 decltype((a)) 是一个左值引用类型 decltype(a + a) 是一个值类型 从以上写法来看auto和decltype用法功能是重叠的所以尽量用auto 但是auto有个限制,你需要在写下 auto 时就决定你写下的是个引用类型还是值类型。使用 auto 不能通用地根据表达式类型来决定返回值的类型 decltype(exp原创 2020-06-11 14:39:10 · 292 阅读 · 0 评论 -
c++不要调用右值的成员函数
//下面这样返回失败,不能拿到正确的字符串 在vs2008上编译有问题 获得的s内存没有值 //现在的编译器支持 cosnt char* s = (strHeaderName + ": " + strHeaderValue).c_str(); ...原创 2019-12-26 21:32:25 · 331 阅读 · 0 评论 -
c++ 栈 堆 RAII
RAII:完整的英文是Resource Acquisition Is Initalization,是c++所持有的资源管理方式。 (依赖栈和析构函数来对所有的资源进行管理 包括堆内存在内) 即智能指针指向一块堆内存,而智能指针对象确实存在于栈中的,通过栈的释放而释放 ...原创 2019-12-17 22:33:33 · 110 阅读 · 0 评论 -
new 和 malloc的区别
1、new/delete是C++中的关键字 malloc/free是库函数 2、new申请内存失败会抛出bac_alloc异常malloc会返回NULL 3、 new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常...转载 2018-09-23 17:15:37 · 90 阅读 · 0 评论