C++11智能指针循环引用问题
不智能的智能指针
查看全文C++ 11
lambda基础使用 lambda表达式(lambdaexpression)是一个匿名函数,lambda表达式基于数学中的λ演算得名。C++11中的lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。lambda表达式的基本构成:[capturelist](paramslist)mut
查看全文在C++98中,智能指针通过一个模板类型auto_ptr来实现。auto_ptr以对象的方式管理堆分配的内存,并且在适当的时间(比如析构),释放获得的堆上的内存。这种堆内存管理的方式只需要程序员将new运算符操作返回的指针作为auto_ptr的初始值计科,不去要在显示的调用delete释放。
查看全文std::move强制转化为右值 既然编译器只对右值引用才能调用转移构造函数和转移赋值函数,而所有命名对象都只能是左值引用,如果已知一个命名对象不再被使用而想对它调用转移构造函数和转移赋值函数,也就是把一个左值引用当做右值引用来使用,怎么做呢?标准库提供了函数std::move,这个函数以非常简单
查看全文左值、右值 在C语言中,我们常常会提起左值lvalue、右值rvalue这样的称呼。一个最为典型的判别方法就是,在赋值表达式中,出现在等号左边的就是左值,而在等号右边的,则称为右值。如:inta=1;intb=2;intc=a+b; 在这个赋值表达式中,c就是一个左值,而a+b则是一个右值。
查看全文右尖括号>改进 在C++98/03的泛型编程中,模板实例化有一个很繁琐的地方,就是连续两个右尖括号>>会被编译解释成右移操作符,而不是模板参数表的形式,需要一个空格进行分割,以避免发生编译时的错误。vector<vector<int>>a;//err,编译
查看全文defaulted背景问题 C++的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一
查看全文