我有问题使用 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(); });
// ...
}
Run Code Online (Sandbox Code Playgroud)
这部分编译很好:
std::for_each(mBegin, mEnd, [](T& item) { item.~T(); });
Run Code Online (Sandbox Code Playgroud)
但这不是:
std::for_each(newBuffer, newBuffer + prevSize, [&](T& item) { item.T(*(mBegin + itemIndex++)); });
Run Code Online (Sandbox Code Playgroud)
即使我使用这样的默认构造函数:
std::for_each(newBuffer, newBuffer + prevSize, [](T& item) { item.T(); });
Run Code Online (Sandbox Code Playgroud)
编译器(VS2013)说明如下:
error C2039: '__this' : is not a member of 'JonsEngine::SceneNode'
error C2039: 'T' : is not a member of 'JonsEngine::SceneNode'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,T是类型JonsEngine::SceneNode.
这是什么问题?为什么不T()解决SceneNode()?为什么析构函数可以工作而不是构造函数?
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |