c++ primer
杰弗瑞同学
在读研究生,专业搬砖,欢迎交流!
展开
-
c++ 内存管理(3)allocator的设计与应用
本文根据《侯捷–c++内存管理》一课进行学习总结:allocator的演变第一个版本是我们自己在类里面进行内存申请,先申请一大块chunk大小的内存空间,再用链表将chunk中切成块,每一块是一个screenChunk=24的大小,用linked list的方式进行连接。第二个版本和第一个版本类似,区别就是使用了union,并用一个*next作为头指针(指向第二块作为开始)。第三个版本,将内存分配封装起来,由allocator统一分配处理。// 第三个版本class alloc原创 2021-11-29 16:09:09 · 545 阅读 · 0 评论 -
默认构造函数,拷贝构造函数,移动构造函数实例
直接上例子,更能清楚的显示区别:(例子参考自c++ primer 5th 课后题)例子1:#include<iostream>#include<vector>using namespace std;struct X { X() { std::cout << "X()" << std::endl; } X(const X&) { std::cout << "X(const X&)" << std原创 2021-11-26 21:41:13 · 290 阅读 · 0 评论 -
effective c++条款总结(7)
认识模板元编程(TMP)// 利用TMP在编译器计算阶乘template<unsigned n>struct Factorial{ enum { value = n * Factorial<n-1>::value };}template<>struct Factorial<0>{ enum { value = 1 };}// 测试函数int main(){ std::cout << Factorial<5>:.原创 2021-11-22 15:06:27 · 649 阅读 · 0 评论 -
effective c++条款总结(6)
使用成员函数模板生成可接受所有兼容类型的函数。// SmartPtr<T>拥有了拷贝构造函数,这个构造函数只有在实参适合(兼容/隐式转换)的时候才能通过编译template<typename T>class SmartPtr{public: template<typename U> SmartPtr(const SmartPtr<U>& other) : heldPtr(other.get()){...} T* get() const.原创 2021-11-22 10:57:51 · 629 阅读 · 0 评论 -
effective c++条款总结(5)
声明template参数是,template< class >和template< typename >是等价的。但有例外:template<typename C>// const C& c 不需要加typenamevoid f(const C& c){// 嵌套从属类型名称,我们需要放置关键字typename// 为了告诉c++编译器C::const_iterator是个类型,缺省的话会被定为为非类型 typename C::const.原创 2021-11-21 17:47:22 · 312 阅读 · 0 评论 -
实现函数指针的功能,tr1::bind,tr1::function,virtual函数重载
直接上例子,参考Effective c++ 和 https://blog.csdn.net/chdhust/article/details/8006601#include <iostream>#include <iomanip>#include <tr1/memory>#include <tr1/functional>//std::tr1::function 可以对静态成员函数进行绑定//std::tr1::bind 可以对非静态成员函数进行绑原创 2021-11-21 14:42:09 · 281 阅读 · 0 评论 -
effective c++条款总结(4)
不要重新定义继承而来的非virtual函数。不要重新定义继承而来的缺省参数值。// 让非virtual函数指定缺省参数,而private virtual函数负责工作。class Base{public: enum BaseType{ A, B, C}; void show(BaseType type = A) const{ doShow(type); }private: virtual void doShow(BaseType type) const = 0;}class D.原创 2021-11-21 14:26:00 · 91 阅读 · 0 评论 -
effective c++条款总结(3)
隐蔽的inline申请是将函数定义在class定义中。同时编译器通常不对通过函数指针进行的调用实现inlineinline void f() {...}void (*pf)() = f;...// f()将被inlined,pf()不被inlinedf();pf();尽量用object的引用或指针代替object去完成,尽量以class声明式代替class定义式,并为声明式和定义式提供不同的头文件。class B{public: ... static std::trl::s.原创 2021-11-20 15:45:02 · 243 阅读 · 0 评论 -
effective c++条款总计(2)
智能指针shared_ptr和auto_ptr都提供了一个get成员函数来执行显式转换,通过重载操作符operator->和operator*实现隐式转换。以const引用传值来避免切割问题,但不适用于内置类型,STL和函数对象。class A{public: ... std::string name() const; virtual void display() const;};class B : public A{public: ... virtual void disp.原创 2021-11-19 17:04:21 · 230 阅读 · 0 评论 -
effective c++ 条款总结(1)
对于单纯常量,最好以const对象或enums替换#defines对于形似函数的宏,最好改用inline函数替换#defines尽量使用conststd::vector<int> vec;// 注意下面的比较const std ::vector<int>::iterator iter = vec.begin();*iter = 10; //正确,iter相当于T* const++iter; //错误,iter本身不能改变const std ::vector<.原创 2021-11-19 00:32:02 · 209 阅读 · 0 评论 -
数组与指针——容易混淆的问题总结
本文通过对c++ primer的总结以及个人理解,总结成一篇博客帮助自己复习。数组在赋值的时候,总会出现一些比较混乱的情况,直接上栗子:我们在使用vector时,经常会因为括号问题出错。// 注意我们在使用vector<string>时不要用()对其初始化和赋值。vector<int> a(10); // 10个0vertor<int> b{10}; // 1个10vector<int> c(10, 1); // 10个1vector<in原创 2021-10-22 21:59:04 · 139 阅读 · 0 评论 -
const常量的用法与易错点分析
本文通过对c++ primer的总结以及个人理解,总结成一篇博客帮助自己复习。1.常量的使用:我们定义一种变量,它的值不能被改变,可以使用关键字const对变量的类型进行限定。我们举个栗子://i正确,j错误,k正确, c正确。//i,c正确初始化,j没有初始化,k是一个未经初始化的常量,一旦运行函数将被初始化。const int i = 1;const int j;const int k = get_size();const int c = i;在多个文件共享const对象时,可以使原创 2021-10-17 15:32:58 · 473 阅读 · 0 评论