gpt4 book ai didi

c++:在构造函数中将shared_ptr的 vector 初始化为不同的指针

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

这是我的:

class A
{
A(int i):_i(i){}

private:
int _i;
};

class B
{
B();

private:
std::vector< boost::shared_ptr<A> > _v;
}

我需要初始化 _v有两个boost::shared_ptr<A>

我试过这个:

B::B():_v(2, boost::make_shared<A>(0)){}

但似乎两个指针都指向唯一创建的对象——不是我需要的。

我没有c++11所以我不能使用:

B::B():_v{boost::make_shared<A>(0), boost::make_shared<A>(0)}{}

这种情况的最佳解决方案是什么?

最佳答案

vector 的创建移动到返回 vector 的函数中。

使用 2 个元素复制 shared_ptrvector 的成本将足够低,您不会在意,而对于 NRVO 和 RVO,它可能完全即使在 C++03 中也进行了优化。 (在 C++11 中,如果 NRVO 和 RVO 由于任何原因被阻塞,它只会移动)。

 // if you make it a member, make it `static`:
std::vector<boost::shared_ptr<A> > make_vector() {
std::vector<boost::shared_ptr<A> > retval;
retval.push_back( boost::make_shared<A>(0) );
retval.push_back( boost::make_shared<A>(0) );
return retval;
}
B::B():_v( make_vector() ) {}

关于c++:在构造函数中将shared_ptr的 vector 初始化为不同的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279868/

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