提问人:Mantosh Kumar 提问时间:12/5/2014 更新时间:12/5/2014 访问量:85
C++ 中原始 STL 实现中“构造”方法的逻辑理解 [复制]
The understanding of logic of "construct" method in original STL implementation in C++ [duplicate]
问:
在浏览 Alexander Stepanov 原始 STL(标准模板库)源代码时,我从内存分配器函数文件中遇到了以下内容:defalloc.h
template <class T1, class T2>
inline void construct(T1* p, const T2& value) {
new (p) T1(value);
}
我无法完全理解它,并且有以下问题/疑问:
- 在我看来,它与类型的复制构造函数有关?
T1
- 为什么上面的函数是模板上两种类型&?。它应该是 first 和 second(value)。
T1
T2
T1*
*T1
- 为什么在上述逻辑中使用了?我查看了它的用途,并在文件 vector.h 中找到了以下内容
new
void push_back(const T& x) { if (finish != end_of_storage) { construct(finish, x); .... .... }
因此,基于上述内容,finish 已经获取了内存并被传递到内存中。另一个参数是 x,它是相同类型 T 的值。这些是我能够思考/理解的几个概念。
在我看来,它非常通用但很重要的功能,在整个 STL 逻辑中都使用过。有人可以解释上面的概念吗?
答:
2赞
JBL
12/5/2014
#1
它是一种放置,这是一种特定类型,您可以在其中直接指定要用于值的(已分配的)内存。new
new
new
为什么上述函数在两种类型 T1 和 T2 上是模板?
在本例中,它是一个接受值以通过强制转换初始化不同类型的东西的放置,就像使用类的构造函数时所做的那样。 (注意语句上的强制转换)。new
T1
new
例如,您可以构造 a from a 和 placed 在一个可读的简洁函数中。这里,T1 = 和 T2 = 。std::string
const char*
new
std::string
const char*
评论