хранение сообщений пользователя, ошибок, исключений (c ++) - PullRequest
1 голос
/ 06 августа 2009

Достаточно простой вопрос. Где хранить ошибки, исключения, пользовательские сообщения? Безусловно, я всегда объявлял локальные строки внутри функции, где она будет вызываться, и не беспокоился. например,

SomeClass::function1(...)
{
std::string str1("message1");
std::string str2("message2");
std::string str3("message3");
...
// some code
...
}

Внезапно я понял, что поскольку конструкция и инициализация вызываются каждый раз, это может быть довольно дорого. Было бы лучше хранить их как статические строки в классе или даже в отдельном модуле? Локализация здесь не так.

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 06 августа 2009

Почему бы просто не использовать строковую константу, когда она вам нужна?

SomeClass::function1(...)
{
/* ... */
    throw std::runtime_error("The foo blortched the baz!");
/* ... */
}

Также вы можете использовать static const std::string с. Это уместно, если вы ожидаете скопировать их во многие другие std::string s, а ваша реализация C ++ выполняет копирование при записи:

SomeClass::function1(...)
{
    static const std::string str_quux("quux"); // initialized once, at program start
    xyz.someMember = str_quux; // might not require an allocation+copy
}

Если вы ожидаете сделать много копий этих string с, и у вас нет копирования при записи (или вы не можете полагаться на его наличие), вы можете захотеть разобраться с использованием boost :: flyweight .

1 голос
/ 06 августа 2009

TBH, вероятно, лучше всего создавать ТОЛЬКО сообщения об ошибках, когда они необходимы (то есть, если что-то идет не так, кому не все равно, если у вас возникнет замедление). Если сообщения всегда будут появляться, то, вероятно, лучше определить их статически, чтобы избежать того факта, что они будут инициализироваться каждый раз. Однако, как правило, я отображаю только пользовательские сообщения в режиме отладки, поэтому их довольно просто не показывать, если вы пытаетесь сделать сборку производительности. Затем я создаю их только тогда, когда они нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...