我在使用for_each()
时遇到问题,并在每个元素上调用构造函数/析构函数。std :: 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
类型。
这里有什么问题?为什么dosn't T()
解析为SceneNode()
?为什么析构函数可以工作,而不是构造函数?
您正试图调用已存在对象的构造函数吗? o.0 –
你为什么明确地调用析构函数?您是否使用展示位置新构建了这些元素? – MatthewRock
只需使用'std :: vector'作为存储。 –