| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > как избежать дублирования ссылок на 1 объект |
| Автор: vadiml 1.11.2007, 12:02 | ||||
| есть perl объект, который является blessed ссылкой на C++ класс. В нём вызывается функция, в которой один из возвращаемых параметров -- указатель на другой С++ класс (или даже этот, что всё равно). Как узнать (где посмотреть), есть ли уже blessed ссылка на этот возвращаемый класс или это новый. Проблема в том, что если будет 2 разных перл-ссылки на 1 С++ класс, то перл вызывает деструктор для них 2 раза, и после второго раза, соответственно, выскакивает "Ошибка сегментирования" например, есть C++ класс Application, который создается только 1 на программу (в нём есть static *self, и через него отслеживается уникальность класса на программу). Я могу в любом месте вызвать static функцию app(), которая вернет self, для этой функции пишется xs:
на что я получу:
но уже имея ссылку на класс Application (например Application=SCALAR(0xa021d20) ) я, вызвав эту функцию, получу новую ссылку Application=SCALAR(0xa021d32) хотя обе они являются одним и тем же C++ классом а на выходе из программы я получу ошибку сегментирования, т.к. перл вызовет DESTROY 2 раза, т.е. для каждой ссылки |
| Автор: vadiml 5.11.2007, 14:39 |
| возможно наиболее близкое из того, что мне надо -- это stash но как там получить нужно мне я не понял наверное лучше завести под это дело хеш на уровне XS (т.е. map) |