Мы все знаем, насколько редко документирован Objective-C ++. Я ничего не могу найти по этому поводу, но мне также трудно найти подходящие однозначные условия поиска. Итак, Stackoverflow на помощь (я надеюсь)!
У меня есть класс C ++, у которого есть экземпляр внутри класса Objective-C (++) (и у меня включена настройка проекта, позволяющая вызывать конструкторы / деструкторы) ).
Это все работает нормально, пока я не попытаюсь раскрыть экземпляр с помощью свойства @synthesize
d. Я делаю это свойство assign
(так как подсчет сохранения в Obj-C не применяется). Это свойство работает, за исключением случаев, когда я устанавливаю экземпляр, я ожидаю, что будет задействован конструктор копирования.
На самом деле я вижу, что создается временный экземпляр (конструктор копирования в , который вызывается ) - что все ожидаемо. Но конструктор копирования в экземпляре ivar не вызывается . Значения «магически» установлены. Я предполагаю, что код @synthesize
d выполняет что-то вроде memcpy
в качестве последнего шага. Это хорошо для C struct
s, но не очень полезно для C ++ class
es, где корректность кода зависит от того, правильно ли вызываются конструкторы копирования и операторы присваивания.
Имеет кто-нибудь изучил это более глубоко, получил его работать, или подтвердили, что невозможно содержать объекты C ++ как ivars в классе Obj-C (++) и иметь конструкторы копирования, вызываемые @synthesize
d установщиками свойств?
(я могу опубликовать пример кода для всего этого, если необходимо - но даже минимальная версия является скринингом или около того).