Overloading = operator,带有一个带字符串指针的结构

时间:2018-01-20 18:42:15

标签: c++ memory-management memory-leaks c++14 unions

所以我有一个union类型结构,它包含一个指向字符串的指针作为union可以容纳的类型之一,我想重载=运算符,这样我就可以进行赋值。为了确保我没有内存泄漏,我正在检查union的类型是否已经是一个字符串,如果是,我删除旧值并分配新值。

我的问题是,如果我执行“aString = aString”,我的检查会删除它意味着分配的字符串,这当然会导致段错误。我知道这不是我需要使用的东西,但我只想确保正确处理这种情况。所以我的问题是如何正确处理?

1 个答案:

答案 0 :(得分:1)

要防止自我分配,您必须确保源对象与目标不同。

这就是赋值运算符通常如下所示的原因:

person& person::operator=(const person& rhs)
{
    if (this != &rhs)
    {
        // free the old resources
        // and copy from rhs
    }
    return *this;
}

移动赋值运算符也应该执行此测试(Move assignment operator and `if (this != &rhs)`)。

有时,将赋值运算符更改为按值而不是引用来获取对象可能很有用,因此您不需要检查自我赋值并使用临时对象来移动或交换。