关于C++中智能指针与类型推导的说明

/*
 * 学习智能指针,及自动推导类型
*/
#include "stdafx.h"
#include <iostream>
#include <memory>
#include <typeinfo>
// 用来测试类型:is_pointer是否是个指针
#include <type_traits>
using namespace std;

// 追踪返回类型
/*(注:返回类型由auto->推导出)*/
template<typename T1,typename T2>
auto Sum(T1 & t1, T2 & t2) -> decltype(t1 + t2) {
	return t1 + t2;
}

int main()
{
	/*
		《类型》
	*/
	// 推导类型-auto
	/* (注:形参,结构体非静态成员,数组,模板均不能使用auto)*/
	auto name = "world.\n";
	cout << "hello " << name << endl;
	// 推导类型-decltype
	/*(注:代表了类型,只接受表达式)*/
	typedef decltype(name) type_t;
	using type_s = decltype(1 + 2.0);
	// 推导函数返回类型-result_of
	/*(注:放入函数,推导函数的返回类型)*/
	typedef long long (*func)();
	result_of<func()>::type type_r;
	// 查看类型
	/* (注:hash_code可以比较2个变量类型是否一致)*/
	cout << typeid(type_r).name() << typeid(type_r).hash_code() << endl;
	// 测试类型
	/*(注:需要引入头文件-type_traits)*/
	cout << is_pointer<decltype(name)>::value << endl;

	/*
		《指针》
	*/

	// 独立的指针,不可复制,智能move
	unique_ptr<int> u_ptr(new int(11));
	unique_ptr<int> uu_ptr = make_unique<int>();
	*uu_ptr = 110;
	// 共享的指针,可以复制
	shared_ptr<int> s_ptr(new int(22));
	shared_ptr<int> ss_ptr = make_shared<int>();
	*ss_ptr = 33;
	// 弱指针,可以判断智能指针是否还有效
	weak_ptr<int> w_ptr = s_ptr;
	w_ptr.expired();
	// 释放指针
	u_ptr.reset();
	//s_ptr.reset();
	s_ptr = w_ptr.lock() ;
	cout << *uu_ptr << endl;
	// 获取原始指针
	cout << *(ss_ptr.get()) << endl;
    return 0;
}


你可能感兴趣的:(智能指针)