我正在读一些关于共享指针的笔记。他们说,STL第一次尝试使用auto_ptr有以下主要缺点:
我理解前两个,但我不知道最后一个是什么意思。
有人能解释一下吗。
谢谢。
发布于 2011-07-31 16:23:12
这是因为一旦将auto_ptr复制到变量中,就会失去指向新变量的指针的所有权。
当你有:
void foo(std::auto_ptr<bar> x);你用一个foo调用auto_ptr,你做一个auto_ptr的副本供foo使用,这有效地将所有权传递给foo,因此在foo完成后指针就被删除了。
这是一个非常令人惊讶的行为,使我最终停止使用auto_ptr。对于try块中的简单RAII ( auto_ptr的主要用例,如书中所述),使用boost::scoped_ptr。
发布于 2011-07-31 16:22:56
基本上,auto_ptr将所有权传递给分配给它的指针。
当您将auto_ptr传递给函数时,指针的所有权将在函数参数中传递给接收指针。该指针的作用域仅限于函数的主体,因此在函数退出时指针将被删除。
在http://www.gotw.ca/publications/using_auto_ptr_effectively.htm上读到它。赫伯·萨特很好地解释了这一点&权威。
发布于 2019-05-30 10:05:47
数据沉槽是吸收您的数据,获取它的所有权的东西。
术语起源于“管道”的概念,在这种概念中,实体链中的某个特定实体从“源”获取其数据,然后将其结果推到“接收器”。链中的下一个实体做同样的事情,依此类推。在每个阶段,实体都不能对传递的数据做任何事情。
通过类比(和示例),考虑从std::cin (充当源的流)获取数据,然后进行一些计算,然后将结果推到std::cout (充当接收器的流)。一旦你完成了,你就完成了;结果就在第二阶段,你无法把它们拿回来。
这就是auto_ptr所做的:不管您是否愿意,它都会将数据的所有权公之于众。
https://stackoverflow.com/questions/6890656
复制相似问题