2

我正在使用哈希表并对其进行重新哈希,我只是将所有值放入一个新的哈希表中,然后将执行实例设置为这个新的哈希表。

我不确定是否可以这样做,所以我只想确认是否是这种情况。我在尝试:

Foo *new_foo = new Foo();
...
delete this;
this = new_foo;

我知道问题不在于删除行,因为即使没有它也无法正常工作。这是错误:错误:需要左值作为赋值的左操作数。

另外,作为一个附带问题,复制分配的数组的最佳/标准方法是什么?*a = *b? 显然,我是 C++ 的新手,知道会有所帮助,但不是必需的。

4

3 回答 3

2

程序不能修改this为指向不同的对象。this是一个常量指针(即T* const)。

this = new_foo; // incorrect.

复制分配的数组的最佳/标准方法是什么?

使用*a = *b;不会复制整个数组。您只是将第一个索引处的值复制ba. 使用std::copy, 代替。


int a[] = { 1,2,3,4,5 } ;
int b[5] ;

// To copy element of a to b -

std::copy( a, a+5, b ) ; // you need to include <algorithm> header.
于 2011-03-20T02:44:28.260 回答
2

你不能分配给this. 考虑创建一个静态方法来创建并返回新实例。

于 2011-03-20T02:45:06.437 回答
0

我认为错误消息告诉您您需要知道的内容。关键字不是左值,因此this您不能分配给它。为什么你不能这样做?:

Foo *old_foo = ...
Foo *new_foo = new Foo();
delete old_foo;
old_foo = new_foo;

或者,如果它真的是一个哈希表,则创建一个“空”方法来遍历元素并将它们全部删除,而不是删除自身。

于 2011-03-20T02:39:00.303 回答