我注意到了奇怪的行为。它可以缩小到以下示例:
#include <memory>
int main() {
std::auto_ptr<int> p1(new int);
#ifdef AUTODEP
std::auto_ptr<int> p2(new int);
#endif
}
和编译
cpptests $ g ++ -Wall -std = c ++ 1y dep.cc
cpptests $ g ++ -DAUTODEP -Wall -std = c ++ 1y dep.cc
dep.cc:在函数'int main()'中:
dep.cc:7:24:警告:'auto_ptr'已弃用(在/usr/include/c++/4.8/backward/auto_ptr.h:87中声明)[-Wdeprecated-declarations]
std :: auto_ptr p2(new int);
当auto_ptr只使用一次时没有任何警告的原因是什么?
测试了
gcc(Debian 4.9.2-16)4.9.2和gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2
我还检查过代码没有优化。