使用Objective-C中的std::list
Use std::list in Objective-C?
我刚刚发现Objective-C中没有LinkedList实现,但我需要一个。所以我将使用std::list
(或者有更好的替代方案?)。
我的问题是:在ARC和非ARC下,我应该关心什么?
您应该手动处理内存管理,因为std::list是一个C++容器。或者,您可以使用NSMutableArray
并将其视为链表,为最后一个索引添加带有insertObject:atIndex:
的新元素,使用迭代器removeLastObject
等对其进行迭代。
您可以使用自定义C++智能指针(在Objective-C++中):
template<class X>
class objc_ptr {
private:
X* ptr;
public:
~objc_ptr() {
if(ptr!=NULL) [ptr release];
}
objc_ptr() {
}
objc_ptr(X* x) {
this.ptr = x;
if(x!=NULL) [x retain];
}
// TODO, copy constructor, operator= ...
};
然后您可以使用:std::list>
或者使用boost intrusive_ptr:
void intrusive_ptr_add_ref(NSObject *x) {
[x retain];
}
void intrusive_ptr_release(NSObject *x) {
[x release];
}
std::list<boost::intrusive_ptr<NSFooBar>> list = ...;
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 使用"std::unordereded_map"映射到"std::list"对象
- 使用std::list创建循环链表
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 内存未释放 std::list<std::shared_ptr<std::string>> C++
- 像 std::list<std::p air<string, string>> 这样的结构在返回时会被复制吗?
- std::list<std::shared_ptr>::擦除得到了一个SIGSEGV
- 将 std::list<std::unique_ptr> 移动到向量中会尝试引用已删除的函数
- C++ DLL 返回指向 std::list<std::wstring 的指针>
- 您将如何为 std::list<std::string> 创建一个类型映射,以在<String> List in C++ 中为 Java 在 SWIG 中创建?
- std::list<std::unique_ptr>:空初始值设定项列表与默认构造函数
- 错误 C2440:"=":无法从"std::list<std::string,std::分配器<_Ty>> *'转换为"std::string*"
- 无法理解如何将新对象添加到 std::list<std::unique_ptr<classname>>
- std::list<std::future>析构函数不阻塞
- 无法反序列化 std::list<std::string>