【发布时间】:2020-05-20 00:25:04
【问题描述】:
我习惯于用 C 编程,在那种语言中,我只会返回一个指向数据的指针,然后调用者将负责释放数据,但是,从我读过的内容来看,向量的析构函数将一旦超出范围就被调用,导致它的数据被释放。
一旦返回引用,内容的大小就不会改变,所以如果我可以有一个指向数据的指针,然后我可以手动删除,那将是理想的。我真正不想想要做的是将所有数据复制到一个新容器中,因为这个向量会变得非常大。
任何帮助将不胜感激。到目前为止,我看到的每个解决方案都涉及按值复制并依赖编译器对其进行优化,或者使用其他类来包装向量。
编辑:要清楚,我要保留的向量的唯一部分是指向其数据的指针(即您使用 vector.data() 方法获得的指针),我不需要保留任何原始向量的其他信息。
【问题讨论】:
-
引用的全部意义在于它不拥有该对象。在这里使用
std::unique_ptr是完全有效的。 -
不,尽管您可以查看智能指针。在 c++ 中,它会被复制,或者简单地作为对象返回(可能带有移动构造函数)。
-
std::vector 和标准库中的大多数容器都支持移动语义。如果您有类似 std::vector
getData(...) { std::vector result; // 生成数据;返回结果; } 结果被移动而不是复制。这不是编译器优化。所以,someitmes 不需要返回一个指针。 -
@KennyOstrom 我认为这与我的问题不一样,因为在这种情况下它们返回一个向量,而在我的情况下,函数确实需要返回一个原始指针。