Effective C++阅读笔记 四

1,让接口容易被正确使用

        促进正确使用:保持接口一致性,增加内置类型的兼容

        阻止误用:通过建立新类型及限制类型的操作,对参数加以束缚,减少意外的失误。

2,设计class犹如设计type

        C++定义一个类的时候,也就设计出了一种新的类型,我们需要谨慎考虑以下几点:

        a,class对象应该如何创建与销毁?

        b,对象的初始化与赋值该有怎么样差别?

        c,对象如果进行值传递,会有什么影响?

        d,如何对成员变量进行有效范围的约束?

        e,新的class的继承关系。

        f,如何进行正确的类型转换?

        g,我们需要进行什么样的操作符和函数的重写,以及禁用某些默认函数。

        h,你真的需要定义一个新的class吗?

3,尽量用带const的引用传递代替值传递。

        值传递的时候会额外调用一次拷贝构造函数和析构函数,这样是非常消耗资源的。而且有时候也会出错,例如这个例子:

class A
{
public:
	A() 
	{ 
	 
	}

	virtual void show() { std::cout <<"A"<<std::endl; }
};

class B :public A
{
public:
	B() {  }

	virtual void show() { std::cout << "B"<<std::endl; }
};

void func(A a)
{
	a.show();
}

int main()
{
	B b;
	func(b);

    std::cout << "Hello World!\n";
}

        打印结果就是A!

        而我们使用引用传递的结果就是B,引用传递还可以减少传递的资源消耗,因为引用传递的本质是指针传递。

        但是对于内置类型或者stl的迭代器或者函数对象,这个结论不一定适用,值传递可能会更快。

4,对于函数的返回值,不要返回局部变量的引用或指针

        这个比较好理解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值