Инстанцирование объекта C++

Обычно, когда пользователь вводит поле из поля в поле в форме (в браузере, который позволяет делать табуляции, а не во всех браузерах), порядок - это порядок, в котором поля отображаются в HTML-коде.

, иногда вы хотите, чтобы порядок вкладок шел немного по-другому. В этом случае вы можете указать поля с помощью TABINDEX. Затем вкладки текут по порядку от самого низкого TABINDEX до самого высокого.

Более подробную информацию об этом можно найти здесь w3

можно найти другую хорошую иллюстрацию здесь

112
задан el_champo 2 December 2008 в 09:23
поделиться

6 ответов

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

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

Так в целом, каждый раз необходимо выделить ресурс, является ли это памятью (путем называния новым), дескрипторы файлов, сокеты или что-либо еще, обертывают его в класс, где конструктор получает ресурс, и деструктор выпускает его. Тогда можно создать объект того типа на стеке, и Вам гарантируют, тот Ваш ресурс освобожден, когда это выходит из объема. Тем путем Вы не должны отслеживать своих новых/удаленных пар везде, чтобы гарантировать, чтобы Вы избежали утечек памяти.

наиболее распространенное название этой идиомы , RAII

Также изучает классы интеллектуального указателя, которые используются для обертывания получающихся указателей на редких случаях, когда действительно необходимо выделить что-то с новым вне специализированного объекта RAII. Вы вместо этого передаете указатель на интеллектуальный указатель, который тогда отслеживает его время жизни, например, подсчетом ссылок, и называет деструктор, когда последняя ссылка выходит из объема. Стандартная библиотека имеет std::unique_ptr для простого основанного на объеме управления, и std::shared_ptr, который делает подсчет ссылок для реализации совместно использованного владения.

Много учебных руководств демонстрируют объектное инстанцирование с помощью отрывка такой как...

Поэтому то, что Вы обнаружили, - то, что большинство учебных руководств сосет.;) Большинство учебных руководств преподает Вам паршивые методы C++, включая вызов нового/удаляющего для создания переменных, когда это не необходимо, и предоставление Вам время жизни отслеживания трудного времени Ваших выделений.

163
ответ дан emlai 5 November 2019 в 09:37
поделиться

Ну, причиной использовать указатель было бы точно то же, которое причина использовать указатели в C выделила с malloc: если Вы хотите свой объект жить дольше, чем Ваша переменная!

Это даже настоятельно рекомендовано для НЕ использования нового оператора, если можно избежать его. Особенно, если Вы используете исключения. В целом намного более безопасно позволить компилятору освободить Ваши объекты.

13
ответ дан PierreBdR 5 November 2019 в 09:37
поделиться

Я видел этот антишаблон от людей, которые не вполне получают & операция вычисления адреса. Если они должны вызвать функцию с указателем, они будут всегда выделять на "куче", таким образом, они получат указатель.

void FeedTheDog(Dog* hungryDog);

Dog* badDog = new Dog;
FeedTheDog(badDog);
delete badDog;

Dog goodDog;
FeedTheDog(&goodDog);
13
ответ дан Mark Ransom 5 November 2019 в 09:37
поделиться

"Куча" обработки как очень важная недвижимость и использование это очень рассудительно. Основное правило ползунка состоит в том, чтобы использовать стек каждый раз, когда возможный и "куча" использования каждый раз, когда нет никакого другого пути. Путем выделения объектов на стеке можно извлечь много пользы, такой как:

(1). Вам не придется волноваться о стеке, раскручивающемся в случае исключений

(2). Вы не должны волноваться о фрагментации памяти, вызванной выделением большего количества пространства, чем необходимый Вашим диспетчером "кучи".

7
ответ дан dangerousdave 5 November 2019 в 09:37
поделиться

Нет никакой причины для нового (на "куче"), когда можно выделить на стеке (если по некоторым причинам Вы не имеете маленький стек и хотите использовать "кучу".

Вы могли бы хотеть рассмотреть использование shared_ptr (или один из его вариантов) из стандартной библиотеки, если Вы действительно хотите выделить на "куче". Это обработает выполнение удаления для Вас, как только все ссылки на shared_ptr вышли из существования.

1
ответ дан Scott Langham 5 November 2019 в 09:37
поделиться

Единственная причина, о которой я волновался бы, состоит в том, что Собака теперь выделяется на стеке, а не "куче". Таким образом, если Собака является мегабайтами в размере, у Вас может быть проблема,

, Если действительно необходимо пойти новым/удаленным путем, опасаться исключений. И из-за этого необходимо использовать auto_ptr или один из типов интеллектуального указателя повышения для управления объектным временем жизни.

5
ответ дан Roddy 5 November 2019 в 09:37
поделиться
Другие вопросы по тегам:

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