Effective C++ 条款18~21

条款18:接口的易用性
将return值存储于shared_ptr从而将delete责任推给智能指针。往往我们函数的返回值指定一个shared_ptr类型。
shared_ptr往往有两个属性 1.管理 2.删除 delete的删除器我们可以指定
P82

std::tr1::shared_ptr<Inv> pInv (static_cast<Inv*>(0),getRidof(Inv))
//pInv是shared_ptr 同时将getRidof作为删除器绑定到pInv

1.促进正确性:保证接口的一致性,以及对于内置类型的兼容
2.阻止误用

条款20:pass_by_reference
缺省情况下,c++按照pass_by_value方式

bool validStudent(const Student& s);
//基类 window  子类 windowWithBar
//目的: 定义函数打印基类(子类) 的属性
//1.
void printNameAndDisplay(Window w){
    std::cout << w.name();
    w.display();
}
WindowWithBar wwsb();
printNameAndDisplay(wwsb)
//问题:args slicing 子类对象向上转型到基类时可能会丢失属性

//2. to slove 1_problem
//pass by reference with const
void printNamePlay(const Window& w){
    std::cout << w.name();
    w.display();
}
printNameAndDisplay(wwsb);

//都涉及到向上转型  指针的类型  对象的类型
//引用: 设计的什么形式,传递进来的就是对应类型

//注意: 内置类型的比如int pass_by_value更快
//int 4bytes  pointer 8bytes

条款21:返回对象而时不要返回指针

//1。不要返回pointer 或者 reference 指向局部对象。 比如local——stack,或者heap-allocated对象

//2。需要返回对象是  return 对象即可
//只不过额外需要一次构造和析构

猜你喜欢

转载自blog.csdn.net/u014297722/article/details/80372346