c++ - 将本地对象转换为指针,而不复制数据?

标签 c++ pointers

我有一个 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/

相关文章:

c - "Pointer being freed was not allocated"发生在 mac 但不是在 windows 7

c++ - 我可以直接从 C++ 中的 vector 元素指针获取索引吗?

c++ - 指向抽象类的指针数组

c++ - 如何高效判断一个整数的汉明权重是否正好为1?

c++ - 从 Objective-C 类调用 C++ 构造函数

java - 如何在应用程序项目中使用 android native 代码

c++ - unique_ptr 和指定解构函数

c - 指针与整数的逻辑与

c - 嗨,有人可以告诉我以下代码的作用吗

c++ - C++中对象的赋值