gpt4 book ai didi

c++ - 你能把一个 pimpl-Class 放在一个 vector 里面吗

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:33 24 4
gpt4 key购买 nike

我有一个使用 PImpl Ideom 实现的类:

class FooImpl {};

class Foo
{
unique_ptr<FooImpl> myImpl;
public:
Foo();
~Foo();
};

现在我想把它放到一个 std::vector 中

void Bar()
{
vector<Foo> testVec;
testVec.resize(10);
}

但是当我这样做时,我得到一个编译器错误 (VC++ 2013)

error C2280: 'std::unique_ptr>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function

我得到与 testVec.emplace_back(); 相同的错误和 testVec.push_back(std::move(Foo()));

(作为解决方法,使用 vector<unique_ptr<Foo>> 似乎可行,但我不明白为什么上面的代码不起作用。)

工作示例:http://coliru.stacked-crooked.com/a/b274e1209e47c604

最佳答案

由于 std::unique_ptr 不可复制,类 Foo 没有有效的复制构造函数。

你可以deep copy or use a move constructor :

#include <memory>
#include <vector>

class FooImpl {};

class Foo
{
std::unique_ptr<FooImpl> myImpl;
public:
Foo( Foo&& f ) : myImpl( std::move( f.myImpl ) ) {}
Foo(){}
~Foo(){}
};

int main() {
std::vector<Foo> testVec;
testVec.resize(10);
return 0;
}

实例:https://ideone.com/HYtPMu

关于c++ - 你能把一个 pimpl-Class 放在一个 vector 里面吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909296/

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