std :: for_each()和调用构造函数/析构函数

Kai*_*aan 0 c++ stl c++11

我有问题使用 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()?为什么析构函数可以工作而不是构造函数?