我在使用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'作爲存儲。 –