#include<iostream>usingnamespace std;intmain(){{// 确定auto_ptr失效的范围// 对int使用
auto_ptr<int>pI(newint(10));
cout <<*pI << endl;// 10 // C++ 11之后判断空指针使用nullptr,不再使用NULL// auto_ptr C++ 17中移除 拥有严格对象所有权语义的智能指针// auto_ptr原理:在拷贝 / 赋值过程中,直接剥夺原对象对内存的控制权,转交给新对象,// 然后再将原对象指针置为nullptr(早期:NULL)。这种做法也叫管理权转移。// 他的缺点不言而喻,当我们再次去访问原对象时,程序就会报错,所以auto_ptr可以说实现的不好,// 很多企业在其库内也是要求不准使用auto_ptr。
auto_ptr<string> languages[5]={auto_ptr<string>(newstring("C")),auto_ptr<string>(newstring("Java")),auto_ptr<string>(newstring("C++")),auto_ptr<string>(newstring("Python")),auto_ptr<string>(newstring("Rust"))};
cout <<"There are some computer languages here first time: \n";for(int i =0; i <5;++i){
cout <<*languages[i]<< endl;}
auto_ptr<string> pC;
pC = languages[2];// languges[2] loses ownership. 将所有权从languges[2]转让给pC,//此时languges[2]不再引用该字符串从而变成空指针
cout <<"There are some computer languages here second time: \n";for(int i =0; i <5;++i){
cout <<*languages[i]<< endl;}
cout <<"The winner is "<<*pC << endl;}return0;}
#include<iostream>#include<assert.h>usingnamespace std;// 编写一个函数,输入两个int型变量a,b// 实现在函数内部将a,b的值进行交换。voidswap(int& a,int& b){int tmp = a;
a = b;
b = tmp;}voidswap2(int* a,int* b){int tmp =*a;*a =*b;*b = tmp;}intmain(){// 交换变量的测试int a =3, b =4;swap(a, b);assert(a ==4&& b ==3);
a =3, b =4;swap2(&a,&b);assert(a ==4&& b ==3);return0;}
为什么有了指针还需要引用?:Bjarne Stroustrup解释 —— 为了支持函数运算符重载
为什么有了引用还需要指针?:Bjarne Stroustrup解释 —— 为了兼容C语言
关于函数传递参数类型
对内置基础类型(如int,double等)而言:在函数中传递pass by value(传值)更高效
对OO面向对象中自定义类型而言:在函数中传递pass by reference to const(const的引用)更高效