我有一个 cnList 类,它存储灵活数量的项目。此列表稍后必须转换为 cnArray 对象。列表类已经实现了方法 cnArray cnList::toArray() const
。
但是如您所见,它返回一个对象,而不是引用或指针。但是在将列表转换为数组后我必须做的是存储这个数组供以后在类成员中使用,这意味着我需要有一个指向该 cnArray 对象的指针。
现在,实际的问题是,简单地使用数组地址不是一个选项,因为它在我当前使用的方法结束后被释放。
我能否以某种方式将此对象“转换”为指针并且不再释放该对象?
当然,我可以将所有条目从对象数组复制到一个指向数组,但这不是我想要的,因为它不是很有效。
我知道我可以在 cnList 中实现一个返回指向 cnArray 对象的指针的方法,但我想知道是否有围绕这个。
最佳答案
您可以从堆中分配一个新的 cnArray,它是根据 toArray
的返回值构建的。如果你做对了,Return Value Optimization将允许编译器优化冗余拷贝:
cnArray *p = new cnArray(list.toArray());
要了解 g++ 的 RVO 将消除拷贝,请参见 http://ideone.com/loXAT
关于c++ - 将本地对象转换为指针,而不复制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931098/