假设我有两个模板类A
和B
:
// 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
期间构建。有没有办法在构造A
时避免临时构造类型B
的对象(如果它发生的话)?另外,请假设我们无法修改A
模板类。
我想要了解的是我们在向量中使用emplace_back()
与push_back()
相比较的类似功能:对象是在该位置构建的,而不是两次。
答案 0 :(得分:3)
您可以(并且应该)直接传递A
构造函数参数而不需要隐含临时代码,而不是......
a_obj{ A<T>{ inputSize } }, idx{ 0 } //temporary object creation?
... ...使用
a_obj{ inputSize }, idx{ 0 }
(前者是否实际创建了一个临时性取决于优化者)。