gpt4 book ai didi

c++ - 没有可用的复制构造函数或声明了复制构造函数 'explicit'

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:47 29 4
gpt4 key购买 nike

有人能解释一下为什么我在这里遇到编译错误 - 错误 C2558:类“std::auto_ptr<_Ty>”:没有可用的复制构造函数或复制构造函数被声明为“显式”

#include <memory>
#include <vector>
#include <string>
template<typename T>
struct test
{
typedef std::auto_ptr<T> dataptr;
typedef std::auto_ptr< test<T> > testptr;
test( const T& data ):
data_( new T(data) )
{
};
void add_other( const T& other )
{
others_.push_back( testptr( new test(other) ) );
}
private:
dataptr data_;
std::vector< testptr > others_;
};

int main(int argc, char* argv[])
{
test<std::string> g("d");

//this is the line that causes the error.
g.add_other("d");

return 0;
}

最佳答案

基本上 std::auto_ptr 不能以这种方式使用。

others_.push_back( testptr( new test(other) ) );

要求存在采用const& 的复制构造函数,而std::auto_ptr 不存在此类构造函数。这被广泛认为是一件好事,因为你不应该在容器中使用std::auto_ptr!如果你不明白这是为什么, 然后 read this article by Herb Sutter ,特别是标题为 “不该做的事,以及为什么不做” 的部分大约进行了 3/4。

关于c++ - 没有可用的复制构造函数或声明了复制构造函数 'explicit',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3420103/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com