【发布时间】:2020-08-23 12:48:57
【问题描述】:
我正在观看有关如何在 C++ 中实现自己的向量/动态数组的 youtube 视频。 除了类似代码之外,我了解所有内容,我是 C++ 新手,并试图了解下划线数据结构的实现。 但是我没有看到这样一行代码。 代码:
template<typename... Args>
T& EmplaceBack(Args&&... args) {
if (m_Size >= m_Capacity) {
ReAlloc(m_Capacity + m_Capacity / 2);
}
new(&m_Data[m_Size])T(std::forward<Args>(args)...);
return m_Data[m_Size++];
}
我没看懂的那一行:
new(&m_Data[m_Size])T(std::forward<Args>(args)...);
那行代码到底在做什么?
顺便说一句,我真的不知道std::forward 是什么。
谢谢任何解释。 :)
【问题讨论】:
-
这种
new的用法叫做placement-new,查一下。至于std::forward,看完美转发。 -
你会发现实际学习和理解 C++ from a good C++ textbook 比从一些随机的 Youtube 视频中容易得多,任何小丑都可以制作和上传。您提到的所有内容都在教科书中以有条理的逻辑顺序进行了解释。否则,就像这里的情况一样,您将面临来自 C++ 中完全不同知识领域的许多不同概念(放置新、完美转发),并且您不知道所有这些是如何工作的,而无需学习它,在有组织的方式。
标签: c++ vector data-structures dynamic-arrays