C++boost::shared_ptr运算符[]详细信息
C++ boost::shared_ptr operator[] details
Boost文档显示
从Boost 1.53版本开始,shared_ptr可以用于保存指向动态分配的数组的指针。
我有一个简单的类,使用boost::shared_ptr
在其中保存std::deque
的数组:
boost::shared_ptr<std::deque<uint32_t> []> someArray;
我想有一个方法从数组中返回指定的deque以只读:
std::deque<uint32_t> MyClass::myMethod(boost::uint32_t arrayIndex) const{
return someArray[arrayIndex];
}
这种方法是否违反了物体的恒定性?
这种方法是否违反了物体的恒定性?
没有。对大概它显然不会影响语法的恒定性,因为编译器不会抱怨。这是因为语法恒定性要求对象及其成员,在这种情况下,尤其是智能指针,是常量。它不要求指针对象(即deques数组)为常量
语义恒定性是另一回事。如果数组属于您的对象,则更改数组意味着更改对象,而对象常量意味着不更改数组。这取决于你强制执行语义上的constness,而不是句法上的constess。然而,在这种情况下,我不会使用shared_ptr
,而是使用std::vector
,因为这表示单一所有权,而shared_ptr
显然是共享所有权。此外,std::vector
被设计为强制语义恒定性,这意味着库实现者强制所包含的元素在const向量中为const
然而,由于我不知道您的类和deque数组的上下文,并且由于您使用明确表示共享所有权的shared_ptr
,可能您需要语义常量,也许不需要。
但是由于您说过您想要只读访问,并且您按值返回,因此该访问不会更改数组内容,因此您可能会满意。通过const引用返回也可以满足您的需要,此外,它还可以避免不必要的临时副本,这些副本可能非常昂贵,具体取决于出队列存储的对象数量
相关文章:
- std::extent 实现详细信息说明
- VisualC++ 2010 有没有办法找出有关未处理异常错误的更多详细信息
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- protobuf,如何在protobuf消息中遍历所有集合字段,我不知道详细信息?(C++)
- AVX2收集指令使用详细信息
- 只知道运行时的数据类型.如何将数据详细信息隐藏到使用它们的其他类
- CppUnit:如何立即打印故障详细信息
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- CPP 异常获取抛出调用方的详细信息
- 内存映射 IO 概念详细信息
- 如何在文本文件中搜索员工记录(按名称)并仅显示其详细信息?
- 使用TDD时隐藏文件访问实现详细信息
- 急需有关_doserrno(MSVC)的详细信息
- 主 - Embarcadero C++生成器 10.2 中的详细信息数据集
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- 实现 std::tuple 的详细信息
- 如何使 clang 格式将所有详细信息命名空间缩进一个
- 如何从 VisualStudio 获取更多详细信息以跟踪警告的来源
- 我在 c++ 中的赋值重载运算符有什么问题?(包括详细信息)
- C++boost::shared_ptr运算符[]详细信息