gpt4 book ai didi

c++ - 使用初始化列表构造时如何避免创建(和删除)临时对象?

转载 作者:太空狗 更新时间:2023-10-29 21:16:04 25 4
gpt4 key购买 nike

假设我有两个模板类 AB:

// Non-modifiable template class.
template<class T>
class A{
private:
T* ptr;
int size;
public:
A( int const inputSize ):
ptr{ new T[ inputSize ] }, size{ inputSize }
{}
};

// Modifiable template class.
template<class T>
class B{
private:
A<T> a_obj;
int idx;
public:
B( int const inputSize ):
a_obj{ A<T>{ inputSize } }, idx{ 0 } //temporary object creation?
{}
};

B 有一个类型为A 的成员变量,需要在构造B 时构造。有没有一种方法可以避免在构造 B 时临时构造类型为 A 的对象(如果它真的发生了)?另外请假设我们不能修改 A 模板类。

我想说明的是我们在 emplace_back() 中看到的与 vector 中的 push_back() 类似的功能:对象是在 place 和不是两次。

最佳答案

您可以(并且应该)直接传递 A 构造函数参数,而无需代码暗示临时的,即代替...

a_obj{ A<T>{ inputSize } }, idx{ 0 } //temporary object creation?

...使用...

a_obj{ inputSize }, idx{ 0 }

(前者是否实际创建一个临时文件取决于优化器)。

关于c++ - 使用初始化列表构造时如何避免创建(和删除)临时对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36193133/

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