Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下这行代码吗 我正在看YouTube视频,如何在C++中实现你自己的矢量/动态数组。 我理解所有的东西,除了一个代码,我是新的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++]; }_C++_Vector_Data Structures_Dynamic Arrays - Fatal编程技术网

有人能解释一下这行代码吗 我正在看YouTube视频,如何在C++中实现你自己的矢量/动态数组。 我理解所有的东西,除了一个代码,我是新的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++]; }

有人能解释一下这行代码吗 我正在看YouTube视频,如何在C++中实现你自己的矢量/动态数组。 我理解所有的东西,除了一个代码,我是新的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++]; },c++,vector,data-structures,dynamic-arrays,C++,Vector,Data Structures,Dynamic Arrays,我不明白的那句话: new(&m_Data[m_Size])T(std::forward<Args>(args)...); 那行代码到底在做什么? 顺便说一句,我真的不知道std::forward是什么。 任何解释,请点击Thx 这行代码构造了一个T类型的对象,其中包含参数args。。。在地址和m_数据[m_大小]处。不涉及内存分配 new(&m_Data[m_Size])T(std::forward<Args>(args)...); 这将分配大小等于

我不明白的那句话:

new(&m_Data[m_Size])T(std::forward<Args>(args)...);
那行代码到底在做什么? 顺便说一句,我真的不知道std::forward是什么。
任何解释,请点击Thx

这行代码构造了一个T类型的对象,其中包含参数args。。。在地址和m_数据[m_大小]处。不涉及内存分配

new(&m_Data[m_Size])T(std::forward<Args>(args)...);
这将分配大小等于sizeofT的内存,并在该内存地址调用T类型的构造函数。std::forward用于称为完美转发的技术中。简言之:没有拷贝,没有移动,没有任何方式的传递-参数只是给构造函数,就像你直接调用它一样

但是,如果您的内存已经预先分配好了呢?这是许多容器(如vector)的主要性能提升点?新接线员是你的朋友。您向它提供预分配内存的地址,它只构造对象。以后不需要删除,因为您没有分配任何新位置


破坏情况如何?通常,删除对象时会自动调用析构函数。在这种情况下,您必须直接调用对象的析构函数,如-t->~t

这行代码构造了一个T类型的对象,其中包含参数args。。。在地址和m_数据[m_大小]处。不涉及内存分配

new(&m_Data[m_Size])T(std::forward<Args>(args)...);
这将分配大小等于sizeofT的内存,并在该内存地址调用T类型的构造函数。std::forward用于称为完美转发的技术中。简言之:没有拷贝,没有移动,没有任何方式的传递-参数只是给构造函数,就像你直接调用它一样

但是,如果您的内存已经预先分配好了呢?这是许多容器(如vector)的主要性能提升点?新接线员是你的朋友。您向它提供预分配内存的地址,它只构造对象。以后不需要删除,因为您没有分配任何新位置


破坏情况如何?通常,删除对象时会自动调用析构函数。在这种情况下,您必须直接调用对象的析构函数,如-t->~t

new的这种用法叫做placement new,查找它。至于STD::向前看,查找完美的转发。你会发现,比任何YouTube视频都能轻松地学习和理解C++,任何小丑都可以制作和上传。你提到的每件事都在教科书中有条理、有逻辑地解释过。否则,正如这里的情况一样,你面临着许多不同的概念,它们在C++中完全不同的知识领域中放置新的、完美的转发,而你不知道这些方法是如何工作的,而不是通过有组织的方式学习的。这种新的用法叫做“放置新”,查找它。至于STD::向前看,查找完美的转发。你会发现,比任何YouTube视频都能轻松地学习和理解C++,任何小丑都可以制作和上传。你提到的每件事都在教科书中有条理、有逻辑地解释过。否则,正如这里的情况,你面临着许多不同的概念,它们在C++中完全不同的知识领域中放置新的、完美的转发,而你却不知道这些方法是如何工作的,而不是通过有组织的方式学习的。