【问题标题】:Overloading = operator, with a struct that has a string pointer [duplicate]重载 = 运算符,带有一个具有字符串指针的结构 [重复]
【发布时间】:2018-01-20 18:42:14
【问题描述】:

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

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

【问题讨论】:

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


【解决方案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)`)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2021-02-20
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多