2

我是提升共享数组的新手。

现有代码声明了两个数组:

boost::shared_array<unsigned char> src; 
boost::shared_array<unsigned char> dest; 

我要做的就是交换每个数组指向的内容(src 变成 dest,dest 变成 src)。据我了解, shared_array.get() 方法返回一个指向其元素之一的指针(可以是任何类型)。

所以我添加的声明是:

boost::shared_array<unsigned char> temp;

我添加的代码是:

temp.get() = src.get();
src.get() = dest.get();
dest.get() = temp.get();

这些行中的每一行都失败了;编译错误是 C2016: '=' : 左操作数必须是左值。

我是 C++ 新手,所以我用谷歌搜索了这个错误,发现该错误消息意味着左手操作数不可赋值。然而,左侧都是指针,并且可以将指针分配给其他指针。

所以我不确定我做错了什么。有人可以帮我吗?

提前致谢。

吉布

4

3 回答 3

7

交换两个shared_arrays(或大多数其他 Boost 共享指针类型)的正确方法是使用swap成员函数:

src.swap(dest);

shared_array这将交换每个s使用的指针和引用计数:

void swap(shared_array<T> & other)
{
    std::swap(px, other.px);
    pn.swap(other.pn);
}
于 2009-11-18T18:13:26.427 回答
2

swap(src,dest)应该做的伎俩。

至于你做错了什么:src.get()给你一个来自对象的指针的副本shared_array,所以即使你可以分配给它,它也不会改变它shared_array本身。您可以将一个数组分配给另一个数组,如下所示:

boost::shared_array<unsigned char> temp = src;
src = dest;
dest = temp;

但是swap效率更高,并且保证不会抛出异常。

于 2009-11-18T18:12:46.833 回答
2

对于您原来的问题:只需swap()使用boost::shared_array. (不要害怕,这不会 memcpy 任何东西。)

在您的情况下,返回的指针get()不是左值,因为您想更改指针本身的值,而不是它指向的数据。所以你需要在这里引用指针。

于 2009-11-18T18:18:39.083 回答