Actionscript 3: получите экранный объект на уровне пикселя

Я не понимаю разницу между malloc и new

blockquote>

Вам необходимо прочитать гораздо больше о C ++ , например, небольшая книга по программированию на C ++ и хороший справочный сайт по C ++ . Да, C ++ - очень сложный язык (вам понадобятся годы работы, чтобы освоить его). Позже вы можете погрузиться в стандарт C ++ 11 n3337 (или более поздний стандарт C ++). Вам, безусловно, нужно точно точно понимать роль конструкторов и деструкторов (и объяснять, что это занимает много страниц, гораздо больше, чем можно разумно ожидать в любом ответе StackOverflow ).

Вам нужно иметь код ваших конструкторов для выполнения (и это делается с new , но не с malloc ) - и позже деструкторы также должны быть выполнены, прежде чем освободить память. Деструкторы называются delete (и во многих других случаях), но, конечно, не free. Читайте также о правиле из пяти и о RAII .

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

Бояться неопределенного поведения .

Инструмент valgrind полезен для поиска ошибок, связанных с памятью. Вы также должны скомпилировать все предупреждения и отладочную информацию, поэтому g++ -Wall -Wextra -g с GCC . Вы также можете использовать статические анализаторы исходного кода, такие как clang-analyzer или Frama-C . Использование их может потребовать большого опыта; нет серебряной пули .

Ваш struct Record_array неправ: предпочитаете использовать std::vector. Узнайте больше о стандартных контейнерах C ++ .

Конструктор вашего Record будет вызывать конструктор из str1 и из str2 (чтобы он, конструктор из std::string -s применялся к двум разным местоположениям). Если вы не вызываете этот конструктор Record, str1 и str2 останутся в неопределенном состоянии (поэтому у вас будет некоторое неопределенное поведение , как только вы их используете).

Основное различие между malloc и amp; free (для C) и new и delete (для C ++) - это способ привлечения конструкторов и деструкторов. Конечно, malloc & amp; free игнорируют их, но не new & amp; [+1121]. Отказ выделения памяти (например, когда виртуальная память исчерпана) также обрабатывается по-другому.

[1 165] PS. На практике вы никогда не должны использовать malloc в коде C ++ , за исключением - только в редких случаях - при определении своего собственного operator new. Потому что malloc не вызывает конструкторы C ++ (но new делает). Также, пожалуйста, поймите, что C и C ++ - это разные языки программирования , и malloc для C, а не C ++. Многие реализации стандартной библиотеки C ++ используют malloc в своей реализации стандарта ::operator new и используют free в своих ::operator delete. ​​

7
задан George 14 April 2009 в 14:17
поделиться

2 ответа

Любой DisplayObjectContainer (например, MovieClip или сцена) имеет метод getObjectsUnderPoint, который возвращает массив экранных объектов в этот момент. Он принимает объект Point в качестве аргумента.

var myObjects: Array = stage.getObjectsUnderPoint(new Point(5, 5));

Если вы используете его в классе, не забудьте импортировать flash.geom.Point;

16
ответ дан 6 December 2019 в 12:54
поделиться

Метод hitTestPoint () получит информацию, если объект DisplayObject находится в указанной точке ( http: / /livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#hitTestPoint())

Чтобы получить список объектов, которые вы должны были бы рекурсивно исследовать для всех детей сцены, я не думайте, что для этого есть предопределенная функция.

Альтернатива: чего вы пытаетесь достичь? Может быть, вы можете просто использовать события и делать их пузыри?

0
ответ дан 6 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

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