语句执行顺序

int priority();
int test(std::shared_ptr<String> str, int priority);

调用test函数时,我们可能直接使用test(std::shared_ptr(new String), priority())。

但是在单个语句的执行中,编译器可能会调整语句的执行顺序,如

  1. new String
  2. priority()
  3. std::shared_ptr()

这样,如果priority()报错,那么new string申请的内存就泄露了。

所以最好单独std::shared_ptr str = std::shared_ptr(new String);

test(str, priority())

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top