考虑以下:

class Example : boost::noncopyable
{
    HANDLE hExample;
public:
    Example()
    {
        hExample = InitializeHandle();
    }
    ~Example()
    {
        if (hExample == INVALID_HANDLE_VALUE)
        {
            return;
        }
        FreeHandle(hExample);
    }
    Example(Example && other)
        : hExample(other.hExample)
    {
        other.hExample = INVALID_HANDLE_VALUE;
    }
    Example& operator=(Example &&other)
    {
        std::swap(hExample, other.hExample); //?
        return *this;
    }
};

我的想法是,析构函数将很快在“其他”上运行,因此,我不必通过使用swap在移动赋值运算符中再次实现析构函数逻辑。但是我不确定这是一个合理的假设。这可以吗?

最佳答案

可以,但是几乎没有什么比the recommended technique of pass-by-value好,在这种情况下,将使用move构造函数。

关于c++ - 在 move 分配运算符中使用std::swap重用析构函数逻辑是否有意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9746748/

10-12 05:46