直接使用返回shared_ptr的函数的值是一个坏主意吗?



例如:

boost::shared_ptr<int> test() {
    boost::shared_ptr<int> x(new int(3));
    return x;
}
void function() {
    int y = *test();
    ...
}

使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的向量

一般情况下,没有。您的示例复制shared_ptr的内容,然后删除原始值。

现在,这里更大的问题是,为int进行动态内存分配的效率非常低,但我假设您没有在实际代码中这样做。:)

在您的示例中,这很好,因为您正在制作int的副本。

如果您将int作为引用,那么在该行之后,它将是一个悬空引用,因为共享指针将超出作用域,删除其目标。

使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的向量。

使用shared_ptr将避免复制,就像使用裸指针将避免复制一样——首先决定是否要避免复制,然后选择应该使用哪种类型的指针。

对于矩阵或图像的向量,您可能希望使用boost::shared_ptrstd::vector,或boost::ptr_vector,或其他一些使内存管理更容易的容器。

我会说,是的,这是个坏主意。

如果你使用指针,有两个原因。1. 你的对象可能是null或2。如果你有一个不想复制的大对象

直接使用这个值不是一个好主意,因为你不知道它是否为空。

相关内容

  • 没有找到相关文章

最新更新