我是新手来增强共享阵列。
现有代码声明了两个数组:
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:'=':左操作数必须是l值。
我是C ++新手,所以我搜索了错误并看到该错误消息意味着左手操作数不可分配。然而,左侧是指针,指针可以分配给其他指针。
所以我不确定我做错了什么。有人可以帮帮我吗?
提前致谢。
JBU
答案 0 :(得分:7)
交换两个shared_array
(或大多数其他Boost共享指针类型)的正确方法是使用swap
成员函数:
src.swap(dest);
这会交换每个shared_array
s使用的指针和引用计数:
void swap(shared_array<T> & other)
{
std::swap(px, other.px);
pn.swap(other.pn);
}
答案 1 :(得分:2)
swap(src,dest)
应该可以解决问题。
至于你做错了什么:src.get()
给你一个来自shared_array
对象的指针的副本,所以即使你可以分配它,它也不会改变shared_array
1}}本身。您可以将一个数组分配给另一个数组,如下所示:
boost::shared_array<unsigned char> temp = src;
src = dest;
dest = temp;
但swap
效率更高,并保证不会抛出异常。
答案 2 :(得分:2)
原始问题:只需使用swap()
的{{1}}方法即可。
(不要害怕,不会记忆任何东西。)
boost::shared_array
返回的指针在您的情况下不是l值,因为您想要更改指针本身的值,而不是它指向的数据。所以你需要在这里引用指针。