例如,如果我有一个包含成员数组且两端都有指针的类,
int mArray[5];
int *mStart = mArray;
int *mEnd = mArray + 5;
我交换了那个类,比如在我的标准赋值运算符中使用 std::swap(mArray, other.mArray)
,这个过程中的指针会发生什么?
这是一个非常人为的例子,但在我的程序中,如果我只交换数组,赋值运算符会按预期工作,如果我尝试交换所有三个成员变量,它就会崩溃。有什么想法吗?
最佳答案
即使您更改存储在 mArray
中的值,该数组仍位于同一地址。所以指针仍然是正确的。
如果将指针值与另一个对象交换,则一个对象中的指针将指向另一个对象的数组。不会很好地工作!
您可以像标准容器那样存储一个指针,而不是存储一个指针,让一个 begin
成员返回一个指向数据的指针/迭代器。
int* begin()
{ return mArray; }
end()
也是如此。
关于C++ 交换成员数组和关联指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40585392/