同义词函数调用:: new((void*)p)T(value);

Al *_*ndy 1 stl new-operator allocator c++11

我正在尝试编写自己的Allocator,可以在STL中使用.到目前为止我几乎可以成功完成,但有一个功能我有我的问题:

Allocator在STL使用应当提供函数construct[使用来自标准分配器示例new&delete]:

// initialize elements of allocated storage p with value value
void construct (T* p, const T& value)
{
    ::new((void*)p)T(value);
}
Run Code Online (Sandbox Code Playgroud)

我被困在如何使用我自己的函数重写new它,它取代了初始化它的关键字value.

此函数construct例如在此代码中使用:fileLines.push_back( fileLine );

哪里

MyVector<MyString>      fileLines;
MyString                fileLine;
Run Code Online (Sandbox Code Playgroud)

这些是我typedefs使用自己的地方Allocator:

template <typename T> using MyVector = std::vector<T, Allocator<T>>;
using MyString = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为在这里被分配pointerT可以是例如[我理解正确的话] MySstring.

难道我的理解是正确的指针-根据所分配new-将有10个字节,如果value123456789,然后将提供value复制到新的指针?

我的问题:

如何使用我自己的函数重写一行代码?对我来说,困难点是如何得到的长度value[它可以有任何类型的为了我能正确判定分配块的长度,以及如何复制它,它适用于所有可能的类型,以便T

Som*_*ude 6

函数中的new运算符construct根本不分配任何东西,它是一个放置新的调用,它接受已经分配的内存块(需要以某种方式预先分配,并且至少sizeof(T)与之一样),并将其初始化为T对象通过调用构造函数T,假装指向的内存p是一个T对象.