学习网址:
C++11 shared_ptr智能指针(超级详细)
http://c.biancheng.net/view/7898.html
类指针创建的方法:
#include <signal.h>
#include <string>
#include <sstream>
#include <iostream>
#include <memory>
using namespace std;
class Param
{
public:
Param(){}
~Param(){}
void print(){
cout<<"hello param"<<endl;
}
};
int test_shared_ptr()
{
std::shared_ptr<int> p;
//创建初始化为10
p = std::make_shared<int>(10);
std::shared_ptr<int> p1; //不传入任何实参
std::shared_ptr<int> p2(nullptr); //传入空指针 nullptr
//std::shared_ptr<int> p3(new int(10));
std::shared_ptr<int> p3 = std::make_shared<int>(10);
//调用拷贝构造函数
std::shared_ptr<int> p4(p3);//或者 std::shared_ptr<int> p4 = p3;
//调用移动构造函数
std::shared_ptr<int> p5(std::move(p4)); //或者 std::shared_ptr<int> p5 = std::move(p4);
//共享指针类的初始化
std::shared_ptr<Param> param;
param = std::make_shared<Param>();
cout<<"p="<<*p<<endl;
param->print();
return 0;
}
int main()
{
test_shared_ptr();
return 0;
}
运行结果:
实践过程中遇到的问题
1
问题现象:
编译出错,error: 'shared_ptr' in namespace 'std' does not name a template type
而且makefile里已经CPP_FLAGS += -std=c++11
按c++11标准编译问题答案:
是缺少头文件#include <memory>