gpt4 book ai didi

c++ - 分配数组时是否可以将参数传递给 std::make_unique() ?

转载 作者:行者123 更新时间:2023-12-03 06:54:44 29 4
gpt4 key购买 nike

在下面的代码中,有什么方法可以将参数传递给 demo使用时的构造函数 std::make_unique()分配一个 demo[]大批?

class demo{
public:
int info;
demo():info(-99){} // default value
demo(int info): info(info){}
};
int main(){
// ok below code creates default constructor, totally fine, no problem
std::unique_ptr<demo> pt1 = std::make_unique<demo>();

// and this line creates argument constructor, totally fine, no problem
std::unique_ptr<demo> pt2 = std::make_unique<demo>(1800);

// But now, look at this below line

// it creates 5 object of demo class with default constructor

std::unique_ptr<demo[]> pt3 = std::make_unique<demo[]>(5);

// but I need here to pass second constructor argument, something like this : -

//std::unique_ptr<demo[]> pt3 = std::make_unique<demo[]>(5, 200);
return 0;
}

最佳答案

std:::make_unique<T[]>()不支持将参数传递给数组元素的构造函数。它始终只调用默认构造函数。您必须手动构造数组,例如:

std::unique_ptr<demo[]> pt3(new demo[5]{200,200,200,200,200});
如果您要创建大量元素,这显然没有用。如果您不介意在构建它们后重新初始化它们,您可以改为执行以下操作:
std::unique_ptr<demo[]> pt3 = std::make_unique<demo[]>(5);
std::fill_n(pt3.get(), 5, 200);
否则,只需使用 std::vector反而:
std::vector<demo> pt3(5, 200);

关于c++ - 分配数组时是否可以将参数传递给 std::make_unique() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64557294/

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