2
我在Visual Studio(2015)上运行这个非常简单的例子。 由于某种原因Functor
类析构函数被调用了4次。 我假设实现会调用自动生成的复制构造函数几次,但我怀疑这里可能存在一个错误。如果我自己实现一个拷贝构造函数,那么我只得到3个与1个默认构造函数调用和2个拷贝构造函数调用相对应的析构函数调用。std :: map与std :: function的值调用析构函数4次,但只构造一个对象
#include <functional>
#include <map>
#include <iostream>
using namespace std;
class Functor
{
public:
Functor()
{
cout << "Functor::Functor()" << endl;
}
Functor& operator=(const Functor& rhs) = delete;
~Functor()
{
cout << "Functor::~Functor()" << endl;
}
void operator()()
{
cout << "Functor::operator()" << endl;
}
};
int main()
{
std::map<int, std::function<void(void)>> myMap;
myMap[1] = Functor();
return 0;
}
输出:
Functor::Functor()
Functor::~Functor()
Functor::~Functor()
Functor::~Functor()
Functor::~Functor()
,如果我实现拷贝构造自己:
Functor(const Functor& that)
{
cout << "Functor::Functor(const Functor&)" << endl;
}
输出:
Functor::Functor();
Functor::Functor(const Functor&)
Functor::Functor(const Functor&)
Functor::~Functor()
Functor::~Functor()
Functor::~Functor()
有人可以解释哪些对象被破坏?这里发生了什么?
在Visual Studio中去调试,选择了步入(热键F11),它会向您显示程序执行的一步一步。 –