Я не уверен, что то, что вы делаете, - это вообще хороший дизайн, но чтобы ответить на ваш вопрос о новом размещении: вы предоставляете аргументы конструктора, как и в любом другом new
выражении:
Построить новую строку:
typedef std::basic_string<unsigned char> ustring;
RS_Token(const char* pstr)
{
void * p = static_cast<void*>(array);
new (p) ustring(pstr, pstr + std::strlen(pstr));
}
Copy-конструкт:
RS_Token(const RS_Token & other)
{
void * p = static_cast<void*>(array);
new (p) ustring(*reinterpret_cast<const ustring *>(other.array));
}
Назначение:
RS_Token & operator=(const RS_Token & other)
{
ustring & s = *reinterpret_cast<ustring *>(array);
s = *reinterpret_cast<const ustring *>(other.array);
return this;
}