Смешивание C ++ и Objective-C

Я использую C ++ в качестве основы приложения и Objective-C для графического интерфейса это нормально.

Но когда дело доходит до объединения этого кода в Objective-C ++ (файл .mm), у меня возникает несколько вопросов:

1. Могу ли я смешивать контейнеры STL с объектами Objective-C или Cocos2D?

Могу ли я сделать следующее в заголовке Objective-C?

#include <vector>
#include <boost\shared_ptr.hpp>
@interface MyClass : NSObject {
  std::vector<boost::shared_ptr<CCSprite> > m_spriteList;
}

И затем в .mm файл, я хочу сделать

CCSprite* newSprite = [/* cocos2d stuff here... */];
m_spriteList.push_back(newSprite);

. Правильный ли приведенный выше код? Это, конечно, на C ++, но я не уверен, когда смешиваете C ++, Objective-C и Cocos2D.

2. Управление памятью с помощью объекта интеллектуального указателя C ++ в Objective-C?

Когда я пытаюсь использовать код C ++ в Objective-C, я хочу объявить объект C ++ как переменную-член в файле заголовка Objective-C.

Допустим, у меня есть класс C ++, объявленный в заголовке test.h :

Test{
};

В заголовочном файле Objective-C я хочу сделать

#include "test.h"
#incude <boost/scoped_ptr.hpp>

#include <vector>
@interface MyClass : NSObject {
   Test* m_testObjectPtr; // (1)
   boost::scoped_ptr<Test>  m_testOjbSmartPtr; // (2)
}

В приведенном выше коде это (2) нормально ? Могу ли я использовать интеллектуальные указатели в Objective-C так же, как в коде C ++? И могу ли я предположить, что деструктор класса Test будет вызван при уничтожении объекта MyClass ?

Или, если (2) не подходит для Objective-C ++, то будет (1) Ладно? Нужно ли мне вручную вызывать delete m_testObjectPtr в dealloc ?

11
задан LearnCocos2D 17 November 2011 в 21:43
поделиться