例如:
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_ptr
的std::vector
,或boost::ptr_vector
,或其他一些使内存管理更容易的容器。
我会说,是的,这是个坏主意。
如果你使用指针,有两个原因。1. 你的对象可能是null或2。如果你有一个不想复制的大对象
直接使用这个值不是一个好主意,因为你不知道它是否为空。