条款17:以独立语句将newed对象置入智能指针

  1. 有以下定义:
int priority();
void processWidget(std::tr1::shared_ptr pw, int priority);
  1. 编译不通过版本:
    processWidget(new Widget, priority());
  2. 可能导致内存泄露版本:
    processWidget(std::tr1::shared_ptr(new Widget), priority());
    原因:new,priority调用,Widget构造函数执行顺序不同。
  3. 推荐版本
    首先以独立语句得到实参,之后将该实参传入函数
std::tr1::shared_ptr pw(new Widget);
preocessWidget(pw, priority());

你可能感兴趣的:(条款17:以独立语句将newed对象置入智能指针)