gpt4 book ai didi

C++ boost::shared_ptr operator[] 细节

转载 作者:行者123 更新时间:2023-11-28 00:43:50 26 4
gpt4 key购买 nike

Boost 文档说

Starting with Boost release 1.53, shared_ptr can be used to hold a pointer to a dynamically allocated array.

我有一个简单的类并使用 boost::shared_ptr 在其中保存 std::deque 数组:

boost::shared_ptr<std::deque<uint32_t> []> someArray;

我想要一个方法来从只读数组中返回指定的双端队列:

std::deque<uint32_t> MyClass::myMethod(boost::uint32_t arrayIndex) const{            
return someArray[arrayIndex];
}

这种做法不会违反对象的恒常性吗?

最佳答案

Doesn't this approach violate object's constancy?

没有。是的。或许。它显然不会影响句法 的稳定性,因为编译器不会提示。这是因为句法恒常性要求对象及其成员(在本例中尤其是智能指针)是常量。它要求指针(即双端队列数组)是常量。
语义恒常性是另一回事。如果数组属于你的对象,那么改变数组就意味着改变对象,而拥有对象 const 意味着不改变数组。由您来强制执行不是句法常量的语义常量。但是,在这种情况下,我不会使用 shared_ptr,而是使用 std::vector,因为它表示单一所有权,而 shared_ptr 是共享的所有权 - 显然。此外,std::vector 旨在强制执行语义恒定性,这意味着库实现者强制包含的元素在 const vector 中为 const。
但是,由于我不知道您的类和双端队列数组的上下文,并且由于您使用 shared_ptr 明确表示共享所有权,可能您需要语义常量,也许不是。

但是 因为您说您想要只读访问并且您按值返回,该访问不会更改数组内容,所以您可能没事。通过 const 引用返回也可能会满足您的需要,此外,它还避免了不必要的临时拷贝,临时拷贝可能会非常昂贵,具体取决于出队存储的对象数量

关于C++ boost::shared_ptr operator[] 细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17403393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com