C ++提升共享数组交换指针(简单问题)

时间:2009-11-18 18:10:09

标签: c++ arrays boost pointers shared

我是新手来增强共享阵列。

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

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

3 个答案:

答案 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值,因为您想要更改指针本身的值,而不是它指向的数据。所以你需要在这里引用指针。

相关问题