为什么使用一个与另一个:"boost::shared_array"VS "boost::shared_ptr<std::vector>"?
Why use one vs the other: `boost::shared_array` VS `boost::shared_ptr<std::vector>`?
因此,对于图像或类似的大块内存,显然有很多选择。
因为我是智能指针和RAII的粉丝,所以我想知道使用它是否更聪明:
- a
shared_ptr
到astd::vector
或
- 与一个
shared_array
指向一个动态分配的数组。选择一个与另一个的概念、实践和性能含义是什么?
这与比较std::vector和C数组是一样的。
考虑shared_array
作为RAII C数组。你得到的只是自动内存回收。在处理返回数组的第三方代码时非常有用。理论上,在某些边缘情况下,它比std::vector快,但灵活性和安全性要差得多。
std::vector可能是更好的选择。
shared_ptr
至std::vector
-
-
在std::vector
之上引入了额外的间接级别
+
允许平摊常数时间push_back
shared_array
-
+
不引入额外的间接级别 -
-
不允许平摊常数时间追加,除非你自己实现它,这又需要额外的间接级别。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- boost::shared_ptr和std::shared-ptr的同居
- 将GoogleMock与Boost::Shared Pointers一起使用时泄漏的Mock对象
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared