Существует ли Windows Registry “словарь”, который объясняет целое (или большая часть) Windows Registry? [закрытый]

Поскольку требуется вызвать fann_destroy_train_data, вы можете использовать C ++ и RAII, используя следующую обертку:

struct fann_wrapper
{
   fann_train_data *td;
   fann_wrapper(fann_train_data* p) : td(p) {}
   ~fann_wrapper() { fann_destroy_train_data(td); }
};
//...
for (int i = 1; i <= epochs; ++i) {
    for (std::vector<std::filesystem::path>::iterator it = batchFiles.begin(); it != batchFiles.end(); ++it) {
        struct fann_train_data *data = fann_read_train_from_file(it->string().c_str());

        // the next line ensures that fann_destroy_train_data is called
        fann_wrapper fw(data);

        fann_shuffle_train_data(data);
        float error = fann_train_epoch(ann, data);
    }  // when this curly brace is encountered, the fann_destroy_train_data is always called
}  

fann_wrapper просто содержит указатель fain_train_data, и при уничтожении fann_wrapper, fann_train_data уничтожен.

Причина, по которой это намного безопаснее, чем метод C, заключается в том, что может быть выдано возможное исключение (по любой причине). Если выдается исключение, то fann_train_data будет всегда уничтожаться при использовании fann_wrapper. Эту гарантию нельзя сделать с помощью метода C, поскольку исключение полностью пропустит любую строку, содержащую fann_destroy_train_data.

Пример:

for (int i = 1; i <= epochs; ++i) {
    for (std::vector<std::filesystem::path>::iterator it = batchFiles.begin(); it != batchFiles.end(); ++it) {
        struct fann_train_data *data = fann_read_train_from_file(it->string().c_str());
        fann_shuffle_train_data(data);
        float error = fann_train_epoch(ann, data);

        fann_destroy_train_data(data); // this line is not executed if an exception is thrown above, thus a memory leak
    }
}  

Вот почему RAII является важной концепцией в C ++. Ресурсы будут очищаться автоматически, независимо от причины выхода исполняемого блока кода (генерируется исключение, выполняется return и т. Д.).

17
задан Clay Nichols 11 September 2008 в 23:04
поделиться

3 ответа

О, как мне жаль, что не было единственного сайта, где реестр был коллективно зарегистрирован всеми, кто пишет значения там! Следует иметь в виду, любое приложение может создать свой собственный набор ключей реестра и значений, таким образом, это не просто MS, кто был бы необходим для такого усилия. Хотя они были бы ключевым игроком!

Тем временем, существует два сайта MS, которые я использую как стартовые точки, когда я должен знать, что конкретная пара ключ/значение сделайте:

ссылка реестра Windows 2003: http://technet.microsoft.com/en-us/library/cc778196.aspx

ссылка Реестра Windows 2000: http://technet.microsoft.com/en-us/library/cc974061.aspx

Имеет в виду, что, так как Windows является развивающейся вещью, даже информация о более старых версиях может быть очень полезной. Также обратите внимание, что W2003 имеет большое сходство XP. К сожалению, я не нашел ссылку на реестры Vista/Windows 2008 года подобной вышеупомянутому.

, Когда необходимо знать то, что произошло с определенным ключом, и это не найдено в одной из вышеупомянутых ссылок, попробуйте поиск полного пути того ключа в http://support.microsoft.com

3
ответ дан 30 November 2019 в 14:36
поделиться

Статья Википедии на самом деле довольно хороша. Не полный отчет всего, но не слишком потертый также. http://en.wikipedia.org/wiki/Windows_Registry

4
ответ дан 30 November 2019 в 14:36
поделиться

Я использовал этот справочный файл в прошлом. Очень хороший ресурс

1
ответ дан 30 November 2019 в 14:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: