如何将std :: map的初始化列表写入shared_ptr

时间:2018-01-08 12:05:56

标签: c++ c++11 shared-ptr initializer-list

我尝试使用以下方式创建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会出现问题?

0 个答案:

没有答案