2

我正在尝试学习 auto_ptr,所以我编写了下面的代码,但结果是

..\src\main.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;
}
4

1 回答 1

3

你不能。

auto_ptr是一个从根本上破碎的班级。您必须使用unique_ptr. 问题的核心是auto_ptr不能复制,但是C++03不涉及移动语义。实际上具有的语义auto_ptr是无用的破坏黑客。

于 2012-07-16T19:55:51.730 回答