Copy& Swap idiom warning:在所有控制路径上递归,函数将导致运行时堆栈溢出

时间:2015-06-26 08:50:02

标签: c++ compiler-errors

这是我第一次实际使用Copy& Swap成语。但是我在编译时得到了这个警告,使用Microsoft VS2013:

  

警告C4717:' std :: swap' :递归所有   控制路径,函数会导致运行时堆栈溢出

我试图得到有罪递归发生的时间/地点,但我无法理解。 我做错了什么。什么可以纠正?

class A
{
private:
    SmartPtr m_sp = nullptr;

public:
    A(){}

    ~A(){}

    A(const A& other)
    {       
        m_sp = other.m_sp;    
    }

    A(A&& other)
    {
        std::swap(*this, other);
    }

    A& operator=(A other)
    {
        std::swap(other, *this);
        return *this;
    }
}

1 个答案:

答案 0 :(得分:6)

您需要实现自己的交换功能。 InstagramCell *cell = (InstagramCell*)[myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:sender.tag inSection:0]]; 将调用赋值运算符。这将调用std::swap。这将调用赋值运算符。哪个会...

std::swap