Конструктор копирования, не вызываемый синтезатором свойств в коде Objective C ++

Мы все знаем, насколько редко документирован 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 установщиками свойств?

(я могу опубликовать пример кода для всего этого, если необходимо - но даже минимальная версия является скринингом или около того).

5
задан JeremyP 4 September 2010 в 17:33
поделиться