Я очень часто использовал списки инициализации в своих программах на C++, но не знал, что вы можете выделить в них память.Есть ли проблемы с распределением памяти в списках инициализации конструктора?
Так что вы можете сделать что-то (как надуманный пример), как это:
class Test
{
private:
int* i;
int* j;
int count;
int* k;
public:
Test(void) : i(new int), j(new int[10]), count(10), k(new int[count])
{
}
~Test(void)
{
delete i;
delete [] j;
delete [] k;
}
};
Существуют ли какие-либо проблемы в делать выделения памяти таким образом? Что касается порядка инициализации здесь, безопасно ли инициализировать параметр одним инициализированным в том же списке? то есть, когда я выделяю count
, прежде чем использовать его, можно ли его использовать или есть какой-то специальный порядок инициализации, который я мог бы испортить?
Обратите внимание, что порядок инициализации не определяется инициализатором ctor, а порядком декларации переменных. Также обратите внимание, что правильный ответ, возможно, зависит от того, хотите ли вы, чтобы ваш код был безопасным для исключений при наличии нового метания или нет. – PlasmaHH