《Effective C++》条款15

在资源管理类中提供对原始资源的访问

cpp 复制代码
class A
{
	...
};
int day(const A* ptr)
{
	...
}
int main()
{
	shared_ptr<A> ptr(new A);
	cout << day(ptr) << endl;
}

这样写是错误的。因为day函数要求的参数是指针,而你传的实际上是一个对象。

如何解决呢?

cpp 复制代码
cout << day(ptr.get()) << endl;

调用了智能指针提供的**get()**函数就可以显示转换类型。

但是显示转换却显得异常麻烦,所以我们需要隐式转换,这样对于用户而言会更方便一点。

隐式类型转换

为什么建议用隐式类型转换?

cpp 复制代码
class A
{
public:

};
class B
{
public:
	A get()
	{
		return a;
	}
private:
	A a;
};

以上是显示类型转换函数,没有问题,但是麻烦的是每次都得调用get,显得不方便,所以建议使用隐式类型转换:

cpp 复制代码
class A
{
public:
	A(int x):a1(x){}
private:
	int a1;
};
class B
{
public:
	B(const A a):a2(a){}
	operator A() const
	{
		return a2;
	}
private:
	A a2;
};
int main()
{
	A a(1);
	B b(a);
	A aa = b;
}
相关推荐
澄澈i23 分钟前
CMake学习篇[3]---CMake进阶+嵌套CMakeLists+多层级关系
c++·学习·cmake
杨小码不BUG1 小时前
蛇形舞动:矩阵填充的艺术与算法(洛谷P5731)
c++·算法·矩阵·csp-j/s·循环控制
草莓熊Lotso2 小时前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list
繁星星繁3 小时前
C++11学习笔记
c++·笔记·学习
Stanford_11068 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
千里马-horse9 小时前
Async++ 源码分析8--partitioner.h
开发语言·c++·async++·partitioner
Lucis__10 小时前
再探类&对象——C++入门进阶
开发语言·c++
北京不会遇到西雅图11 小时前
【SLAM】【后端优化】不同优化方法对比
c++·机器人
jndingxin11 小时前
c++多线程(6)------ 条件变量
开发语言·c++
程序员莫小特12 小时前
老题新解|大整数加法
数据结构·c++·算法