摘要:
变量的类型带有构造和析构时,定义一个变量会承受这两个成本,因此在使用时再定义它。例如,如果执行过程中可能被exception中断导致预先定义的变量没有使用,那么这个成本最好不要提前承担。 再比如,不要多承担一次赋值的成本。直接在构造时初始化预期的值。 一种常见的场景:for循环中需要使用某个变量,是 阅读全文
摘要:
这个条款所说的意思就是,不要把new对象并放入智能指针这个操作放入到一个别的过程之中。 例如,如果把new对象并放入智能指针放入到一个传参过程之中,可能会发生其他参数的执行在new对象并放入智能指针之间发生,如果其他参数的执行发生了异常,那么new出来的对象并没有放入智能指针,就内存泄漏了。 所以, 阅读全文
摘要:
不要对数组做typedef,会产生很多问题,尽量使用std的string和vector来代替。 new和new一个数组时,内存实际布局有区别,new数组时,会在开头记录数组长度(具体编译器有不同实现,但主流是这样的)。所以调用delete的时候也要用相同形式,否则会误把数组当作单独对象delete, 阅读全文
摘要:
就是提供一个显示访问原始资源的接口,比如.get()。尽量别用隐式转换,方便了用户,苦了dev。没那么懂的时候,就苦一下用户。 阅读全文
摘要:
问题:当拷贝一个RAII对象时会发生什么?有以下几种选择 禁止复制 如果复制一个RAII是不合理的,把拷贝构造和拷贝赋值运算符定义为delete就行了。 引用计数 某些资源的RAII对象可以被复制,但是当最后一个RAII对象不再使用时,应该销毁资源。书中用tr1::shared_ptr举例,这个东西 阅读全文