指针
指针
智能指针
作用域指针(unique_ptr)
超出作用域时会调用delete,销毁指针。
作用域指针不能复制,因为当其中一方销毁时,指针所指向内存会被释放。
std::unique_ptr<Entity> e1 = std::make_unique< Entity>(); std::unique_ptr<Entity> e2 = e1; //error
作用域指针需要显式调用构造函数,因为其被explicit修饰。
构造一个作用域指针:
std::unique_ptr<Entity> e1 = new Entity(); //error,需显式调用 std::unique_ptr<Entity> e1(new Entity()); std::unique_ptr<Entity> e1 = std::make_unique< Entity>(); //这样更安全
共享指针(share_ptr)
共享指针需分配一块叫控制块的内存用来储存引用计数。
共享指针可以复制,复制给共享指针之后引用计数加一,当引用计数为0时调用delete。
将一个共享指针赋值给另一个共享指针时,会增加引用计数;但把一个共享指针赋给一个弱指
(weak_ptr)时,引用计数不会增加。构造一个共享指针:
std::shared_ptr<Entity> e2 = std::make_shared<Entity>();
函数指针
函数指针的基本概念
指向函数的指针,可通过找到函数的地址从而直接调用函数。
创建一个变量储存函数指针:
void(*functionname) = HelloWorld;
使用函数指针:
functionname();
lambda表达式
用于定义匿名函数
lambda表达式:
auto lambda = [](int value) {std::cout << value << std::endl; };
this指针
this指针指向被调用的成员函数所属的对象。
this指针是隐含在每一个非静态成员函数内的一种指针。
当形参和成员变量重名时,可以用this指针进行区分。
Person(int age) { this->age = age; }
在类的非静态成员函数中返回对象本身,可用return *this。
//必须返回引用,否则每次会新创建一个对象再返回,导致p2只调用了一次,之后是返回对象在调用 Person& PersonAddPerson(Person p) { this->age += p.age; return *this; } void test01() { Person p2(10); p2.PersonAddPerson(10).PersonAddPerson(10).PersonAddPerson(10); //链式编程思想 std::cout << "p2.age = " << p2.age << std::endl; }