
c++语法
iwonako
这个作者很懒,什么都没留下…
展开
-
bind2nd使用
首先要继承binary_function类,而自定义的函数对象必须是常函数? template<classF,classT> std::binder2nd<F>bind2nd(constF&f,constT&x); 从定义看接收的函数对象是常对象,所以要写成常函数。less<T>()也是常函数 template<class T> class A :public binary_function<T,...原创 2021-08-04 13:08:35 · 240 阅读 · 0 评论 -
c++继承内存分布
一般子类继承父类,子类的虚函数会在父类的虚函数表中覆盖同名虚函数,子类中新的虚函数会添加到父类的虚函数表末尾。多继承时,将继承所有父类的虚函数表并覆盖,而子类中新的虚函数会添加到第一个声明的父类的虚函数表末尾。 虚继承时子类除继承继承父类的虚函数表,用重写的虚函数覆盖父类的同名虚函数。子类新的虚函数会填入由自己创建的虚函数表中。 sizeof(A):vftptr1+char[2]=8,考虑内存对齐,32位 vftable1=A::aa() sizeof(B)+vbptr1+char[2]+...原创 2021-07-31 10:32:29 · 470 阅读 · 0 评论 -
c++异常对象声明周期
演示了抛出前及抛出时构建的对象的释放时机。 从结果看,抛出前构建的对象会在异常抛出后捕获前析构。抛出时构建的对象在捕获异常处理完后析构。 class A { public: int _a; A(int a=0) { cout << "A construct=" << a << endl; _a = a; } A(const A& a) { cout << "A ..原创 2021-07-29 01:58:27 · 116 阅读 · 0 评论