<分区>
在遍历 Alexander Stepanov 时原始STL(Standard Template Library)源代码,我从内存分配器函数文件中遇到了以下内容:defalloc.h
template <class T1, class T2>
inline void construct(T1* p, const T2& value) {
new (p) T1(value);
}
我无法完全理解并有以下问题/疑问:
- 在我看来,它与
T1
类型的复制构造函数有关? - 为什么上面的函数是两种类型
T1
和T2
的模板?。第一个应该是T1*
,第二个(值)应该是*T1
。 - 为什么在上面的逻辑中使用了
new
?。我查看了它的用途并在文件 vector.h 中找到了以下内容
void push_back(const T& x) { if (finish != end_of_storage) { construct(finish, x); .... .... }
所以基于上面,finish已经获取了内存并被传递进去了。另一个参数是 x,它是相同类型 T 的值。这些是我能够想到/理解的几个概念。
在我看来,它是一个非常普遍但很重要的函数,已在整个 STL 逻辑中使用。有人可以解释一下上面的概念吗?