但是当涉及将这些代码混合在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. 在Objective-C中使用C++智能指针对象进行内存管理?
当我尝试在Objective-C中使用C++代码时,我想将一个C++对象声明为Objective-C头文件中的成员变量。
假设我有一个在test.h
头文件中声明的C++类:
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++ 代码中那样使用智能指针吗?我可以假设 MyClass
对象被销毁时 Test
类的析构函数会被调用吗?或者,如果 (2) 在 Objective-C++ 中不可用,那么 (1) 可以使用吗?我需要在
dealloc
中手动调用 delete m_testObjectPtr
吗?
/
而不是反斜杠\
来分隔路径:#include <boost/shared_ptr.hpp>
。 - kennytm