gpt4 book ai didi

c++ - 将从不可复制派生的对象放置到 vector 中

转载 作者:行者123 更新时间:2023-11-30 02:16:30 26 4
gpt4 key购买 nike

<分区>

我有保存指针并与他人共享的对象。 move 它们很好,但复制不行。我想将它们存储在 vector 和 map 中。当 A 没有析构函数时,以下代码有效。但是我需要一个析构函数来清理我的指针。

#include <vector>

struct OnlyMove
{
OnlyMove(const OnlyMove&) = delete;
OnlyMove& operator=(const OnlyMove&) = delete;
OnlyMove(OnlyMove&&) = default;
OnlyMove& operator=(OnlyMove&&) = default;

protected:
OnlyMove() = default;
};

struct A : OnlyMove
{
A(int){}
~A(){} // makes compilation fail
};

int main()
{
std::vector<A> y;
y.emplace_back(1);
}

当我一个析构函数时的错误:

/usr/local/include/c++/8.2.0/bits/stl_construct.h: In instantiation of 'void std::_Construct(_T1*, _Args&& ...) [with _T1 = A; _Args = {A}]': … error: use of deleted function 'OnlyMove::OnlyMove(const OnlyMove&)'

我不明白为什么。析构函数在这里扮演什么角色?

Live Demo

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