Я использую С++ в качестве основы для приложения и 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);
Является ли приведенный выше код действительным? Это, конечно, в С++, но я не уверен, когда смешиваю С++ и Objective-C и Cocos2D.
2. Управление памятью с использованием интеллектуального указательного объекта С++ в Objective-C?
Когда я пытаюсь использовать код С++ в Objective-C, я хочу объявить объект С++ как переменную-член в заголовочном файле Objective-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, как в коде на С++? И могу ли я предположить, что деструктор класса Test
будет вызываться при уничтожении объекта MyClass
?
Или если (2) не подходит в Objective-C ++, то (1) хорошо? Мне нужно вручную вызвать
delete m_testObjectPtr
в dealloc
?