Я использую 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
?