Умные указатели / безопасное управление памятью для C?

Несколько вещей:

Javascript чувствителен к регистру, поэтому true - это зарезервированное слово, True - нет. Таким образом, вместо var nameFormat = True, вы должны сделать: var nameFormat = true.

Затем вы говорите, что хотите спрятать div2 welcome2 и welcome2-0, но в своем коде javascript вы этого не делаете. Если вы хотите сделать это, сделайте следующее:

$("#welcome2").hide();
$("#welcome2-0").hide();
// or
$("#welcome2").fadeOut(100);
$("#welcome2-0").fadeOut(100);

Есть еще одна проблема в вашем блоке else: вы делаете nameFormat == false, который просто сравнивает, если nameFormat имеет значение false Если вы хотите присвоить false переменной nameFormat, сделайте это:

nameFormat = false;
43
задан Scott Stafford 1 September 2010 в 17:54
поделиться

4 ответа

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

Если вы действительно беспокоитесь об этом Возможно, вы захотите просто использовать сборщик мусора и вообще обойти требование умного указателя.

13
ответ дан 26 November 2019 в 23:06
поделиться

Another approach that you might want to consider is the pooled memory approach that Apache uses. This works exceptionally well if you have dynamic memory usage that is associated with a request or other short-lived object. You can create a pool in your request structure and make sure that you always allocate memory from the pool and then free the pool when you are done processing the request. It doesn't sound nearly as powerful as it is once you have used it a little. It is almost as nice as RAII.

8
ответ дан 26 November 2019 в 23:06
поделиться

Инструменты статического анализа кода, такие как splint или Gimpel PC-Lint, могут вам помочь - вы даже можете сделать их в меру «профилактическими», подключив их в ваш автоматический сервер в стиле "непрерывной интеграции". (У вас есть один из них, верно?: Grin:)

Есть и другие (более дорогие) варианты на эту тему ...

3
ответ дан 26 November 2019 в 23:06
поделиться

Если вы кодируете в Win32, вы можете использовать структурированную обработку исключений для достижения чего-то подобного. Вы можете сделать что-то вроде этого:

foo() {
    myType pFoo = 0;
    __try
    {
        pFoo = malloc(sizeof myType);
        // do some stuff
    }
    __finally
    {
        free pFoo;
    }
}

Хотя это и не так просто, как RAII, вы можете собрать весь свой код очистки в одном месте и гарантировать его выполнение.

1
ответ дан 26 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

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