我正在尝试学习auto_ptr,所以我写了下面的代码,但它的结果是
..srcmain.cpp:23: error: no match for 'operator=' in 'p1 = source()()'
我做错了什么?如何分配返回的auto_ptr?
#include <stdio.h>
#include <memory>
using namespace std;
auto_ptr<int> source() {
int *i = new int();
*i = 100;
return auto_ptr<int>(i);
}
int main() {
std::auto_ptr<int> p1, p2;
p1 = p2;
p1 = source();
return 0;
}
您不能。
auto_ptr
是一个从根本上被破坏的类。您必须使用unique_ptr
。问题的核心是auto_ptr
不能被复制,但是C++03不涉及移动语义。auto_ptr
的语义实际上是无用的破解。