gpt4 book ai didi

带有 auto_ptr 的 C++ 初始化器列表

转载 作者:行者123 更新时间:2023-11-30 04:24:36 25 4
gpt4 key购买 nike

这是如何编译和工作的:

class MyObject {
public:
MyObject() {}
};

struct ItemGood {
int Number;
MyObject *Object;

ItemGood(int Number, MyObject *Object) {
this->Number = Number;
this->Object = Object;
}
};

const ItemGood ItemGoodList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};

这根本无法编译:

class MyObject {
public:
MyObject() {}
};

struct ItemBad {
int Number;
std::auto_ptr<MyObject> AutoObject;

ItemBad(int Number, MyObject *Object) {
this->Number = Number;
AutoObject = std::auto_ptr<MyObject>(Object);
}
};

const ItemBad ItemBadList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};

编译器吐出的错误是:

no matching function for call to 'ItemBad::ItemBad(ItemBad)

我不明白为什么有人试图调用那个构造函数,我不明白这个初始化列表中实际发生了什么。

最佳答案

因为 std::auto_ptr 没有合适的复制构造函数,这意味着你的类没有合适的复制构造函数,这意味着它不能从临时构造——这就是你正在尝试做。

只是垃圾 auto_ptr 并移动到 unique_ptr

关于带有 auto_ptr 的 C++ 初始化器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624636/

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