что значит «новый» синтаксис значит?

Недавно я прочитал кусок кода, как это:

template <unsigned long size>
class FooBase
{
bool m_bValid;
char m_data[size];
};

template <class T>
class Foo : public FooBase<sizeof(T)>
{
// it's constructor
Foo(){};
Foo(T const & t) {construct(t); m_bValid = (true);}

T const * const GetT() const { return reinterpret_cast<T const * const>(m_data); }
T * const GetT() { return reinterpret_cast<T * const>(m_data);}

// could anyone help me understand this line??
void construct(T const & t) {new (GetT()) T(t);}
};

Я нарезал код, чтобы убедиться, что он не так сложен, основной вопрос о construct(T const & t) функция.

Что значит new (GetT()) T(t); точно значит?

кстати, какая версия GetT() называется?

2

Решение

Что значит new (GetT()) T(t); точно значит?

это Размещение нового, это позволяет вам поместить объект в определенное место в памяти, которое возвращается Get(),

какая версия GetT() называется?

Второй.
Всякий раз, когда компилятор имеет возможность выбора между const и неконстантной функцией, он выбирает неконстантную версию.
В частности, в этом случае, как указывает @James в комментариях:
Неконстантной версии отдается предпочтение, потому что вызывающая ее функция-член неконстантна.

5

Другие решения

Это называетсяРазмещение нового».

Это означает, что вы создаете новый объект в данном буфере памяти.

new (buffer) T(); //means it will instantiate an object T in the buffer.

Это позволяет вам иметь буферы памяти и пользовательские распределители, без необходимости запрашивать и выделять новую память из операционной системы.

Прочитай это:
Для чего нужны "размещение нового"?

2

Это похоже на размещение нового вызова. Здесь не выделяется память. new просто возвращает адрес в скобках и вызывает конструктор фактически создаваемого объекта.

1
По вопросам рекламы [email protected]