(не) использование std :: string в исключениях

Я всегда читал, что я не должен бросатьstd::string или некоторые другие классы, выделяющие память. лайкВот или что более важноВот по пункту 3. -Дон»вставлятьstd::string объект.

Так что теперь яя пытаюсь вставитьповышение :: исключение в мой проект и что я вижу:много строк.

Почему нетt boost соответствует собственной рекомендации?

И если у меня есть параметры, которые могутне быть жестко закодированным, как, например, сохраненным в конфигурационном файле, как я могу поместить их в исключение, не используя?std::string

Или это руководстводон»т использоватьstd::string толькодействительно использоватьstd::string как можно реже руководящее? Я'я немного смущен ... я

мы сделали некоторые исследования. Пожалуйста, поправьте меня, если яЯ не прав.

Если я правильно понимаю, этовсе о распределениив течение бросок и что происходит с выделенной памятью. Так что память теряется, если я выделяю ее в конструкторе, и она может 'быть освобожденным в деструкторе исключения, которое вызовет утечку памяти. Но это'Можно распределить это перед броском, поэтому исключение чисто.

Я попробовал это:

struct xexception {
  int *ttt[10];
  xexception() {
    ttt[0] = new int[0xfffffffL];
    ttt[1] = new int[0xfffffffL];
    ttt[2] = new int[0xfffffffL];
    ttt[3] = new int[0xfffffffL];
    ttt[4] = new int[0xfffffffL];
    ttt[5] = new int[0xfffffffL];
    ttt[6] = new int[0xfffffffL];
    ttt[7] = new int[0xfffffffL];
    ttt[8] = new int[0xfffffffL];
    ttt[9] = new int[0xfffffffL];
  }

  ~xexception() throw() {
    //never happen
    delete[] ttt[0];
    delete[] ttt[1];
    delete[] ttt[2];
    delete[] ttt[3];
    delete[] ttt[4];
    delete[] ttt[5];
    delete[] ttt[6];
    delete[] ttt[7];
    delete[] ttt[8];
    delete[] ttt[9];
  }
};

int main(int argc, const char *argv[]) {
  try {
    throw(xexception());
  }
  catch (const xexception &e) {
    std::cerr < "\nttt " < e.ttt[0][0] < std::endl;
  }
  catch (std::bad_alloc) {
    std::cerr < "bad alloc" < std::endl;
  }

  return 0;
}