Использование C ++ из Цели C: как распределять / освобождать? - PullRequest
2 голосов
/ 12 ноября 2008

В настоящее время мои классы Objective C используют объекты C ++, выполняя new при создании владельца и вызывая delete при его уничтожении. Но есть ли другой способ? Я хотел бы иметь возможность объявить, скажем, auto_ptr, область действия которого длится продолжительность жизни класса Objective C.

Ответы [ 3 ]

3 голосов
/ 12 ноября 2008

Хорошо, позвольте мне предположить, что вы используете C ++ и Objective-C на Mac, если я прав, вы, вероятно, используете X-код. Так что если вы идете в свойствах (информация) вашего проекта. Вы можете проверить параметры компиляции (GCC). Там есть возможность включить конструкторы / деструкторы C ++ (которые по умолчанию отключены в проектах Какао).

Затем вы получаете видимость по умолчанию, похожую на C ++, однако я не очень часто его использовал, и у меня были проблемы с большим количеством шаблонов кода (Boost).

Также я не думаю, что кто-то официально поддерживает это, кроме хороших людей, работающих над GCC. Поэтому я бы порекомендовал вам протестировать что-либо подобное и помнить, что что-то может пойти не так.

Тем не менее, возможность использовать C ++ в Objective-C для меня, как человека, работающего на C ++, - это облегчение, и риски того стоят:)

1 голос
/ 12 ноября 2008

Если у вас есть хоть малейшая надежда сохранить то маленькое здравомыслие, которое мы, разработчики, оставили, вы этого не сделаете. Лучше всего delete ваши объекты C ++. В целом, хотя можно безопасно смешивать Objective-C и C ++ построчно, не ожидайте, что среда выполнения будет поддерживать что-то необычное, например, смешивание времени жизни. В общем, вы можете безопасно уничтожать ваши объекты, когда вызывается dealloc вашего класса obj-c, но, кроме этого, не ожидайте смешивать область видимости класса и не плакать.

0 голосов
/ 21 января 2011

В Xcode я читаю «Язык программирования Objective-C», раздел под заголовком «Использование C ++ с Objective-C». Я не пробовал, но он говорит, что вы можете использовать классы C ++ в качестве переменных экземпляра. Он использует конструктор с нулевым аргументом для инициализации любых переменных экземпляра, которые являются классами C ++. В dealloc деструкторы вызываются в обратном порядке объявления переменных экземпляра.

Я только что наткнулся на OCPtr и комментарий к Boost :: shared_ptr с какао . Оба используют умный указатель подсчета ссылок (тот, который управляет всем подсчетом ссылок для операторов присваивания и т. Д.).

...