我在使用 for_each()
和在每个元素上调用构造函数/析构函数时遇到问题。
作为引用,mBegin
指向数组的开始,mEnd
超出最后一个元素,mCapacity
指向分配内存的结尾.
template <typename T>
void IDMapTree<T>::Grow()
{
const size_t prevSize = mCapacity - mBegin;
const size_t newSize = prevSize != 0 ? static_cast<size_t>(1.5f * prevSize) : 1;
T* newBuffer = static_cast<T*>(mAllocator.Allocate(newSize));
// initialize new buffer elements with copy constructor using old elements
uint32_t itemIndex = 0;
std::for_each(newBuffer, newBuffer + prevSize, [&](T& item) { item.T(*(mBegin + itemIndex++)); });
// destruct all old elements
std::for_each(mBegin, mEnd, [](T& item) { item.~T(); });
// ...
}
该段编译良好:
std::for_each(mBegin, mEnd, [](T& item) { item.~T(); });
但这不是:
std::for_each(newBuffer, newBuffer + prevSize, [&](T& item) { item.T(*(mBegin + itemIndex++)); });
即使我像这样使用默认构造函数也不行:
std::for_each(newBuffer, newBuffer + prevSize, [](T& item) { item.T(); });
编译器 (VS2013) 表示如下:
error C2039: '__this' : is not a member of 'JonsEngine::SceneNode'
error C2039: 'T' : is not a member of 'JonsEngine::SceneNode'
在这种情况下,T
是 JonsEngine::SceneNode
类型。
这里有什么问题?为什么 T()
不解析为 SceneNode()
?为什么析构函数起作用而构造函数不起作用?
最佳答案
您可以使用 std::uninitialized_copy()
为此。
关于c++ - std::for_each() 和调用构造函数/析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32441706/