我尝试使用以下方式创建std :: map:
std::map<QString, std::shared_ptr<A> > stringToA { {QString("B"), std::shared_ptr<A>(new B())}, {QString("C"), std::shared_ptr<A>(new C())} };
C&amp; B继承自A,我与std::make_shared<A>
的结果相同。
我的问题如下:如何将std::map
初始化为shared_ptr
,以及为什么代码无法正常运行?
#include <map>
#include <memory>
#include <QString>
#include <QDebug>
class A{
public:
A(){qDebug()<<"ctorA";}
~A(){qDebug()<<"dtorA";}
};
class B : public A {
public:
B(){qDebug()<<"ctorB";}
~B(){qDebug()<<"dtorB";}
};
class C : public A {
public:
C(){qDebug()<<"ctorC";}
~C(){qDebug()<<"dtorC";}
};
std::map<QString, std::shared_ptr<A> > stringToA { {QString("B"), std::shared_ptr<A>(new B())}, {QString("C"), std::shared_ptr<A>(new C())} };
int main(int argc, char *argv[])
{
qDebug()<<"start of programm";
return 0;
}
输出如下:
ctorA
ctorB
ctorA
ctorC
dtorB
dtorA
start of programm
dtorC
dtorA
为什么在开始编程之前dtorB会出现问题?