CLion下构建运行,会提示程序停止工作,看来是管理内存出了问题,但是具体不知道在哪里
#include <iostream>
#include<map>
#include<string>
#include<memory>
using namespace std;
class AbstractWall{
public:
virtual ~AbstractWall(){}
virtual void appearence(string str,pair<int,int> p)=0;
virtual void show()=0;
};
class PaintingWall:public AbstractWall{
public:
virtual ~PaintingWall(){}
virtual void appearence(std::string str, pair<int, int> p) override {
arc.insert(make_pair(str,p));
return;
}
virtual void show() override{
cout<<"这一面墙上:"<<endl;
for(auto it:arc){
cout<<"在坐标("<<it.second.first<<","<<it.second.second<<")"<<"处画了"<<it.first<<endl;
}
cout<<endl;
return;
}
private:
map<string,pair<int,int>> arc;
};
class AbstractDrawer{
public:
virtual ~AbstractDrawer(){}
virtual void draw()=0;
virtual void paint()=0;
AbstractWall* getWall(){
return wall;
}
protected:
AbstractWall* wall;
};
class DrawerAndy:public AbstractDrawer{
public:
virtual void draw() override{
wall->appearence("黑色城堡", make_pair(12,12));
return;
}
virtual void paint() override{
wall->appearence("幻色飞蛾", make_pair(123,123));
return;
}
};
class DrawerPolok:public AbstractDrawer{
public:
virtual void draw() override{
wall->appearence("狂放线条", make_pair(324,143));
return;
}
virtual void paint() override{
wall->appearence("四棵大树", make_pair(113,43));
return;
}
};
class Director{
public:
~Director(){}
Director(AbstractDrawer* d):Drawer(d){}
AbstractWall* MakeArtwork(){
Drawer->draw();
Drawer->paint();
return Drawer->getWall();
}
private:
AbstractDrawer* Drawer;
};
int main() {
unique_ptr<AbstractDrawer>d1(new DrawerAndy);
unique_ptr<Director>dir(new Director(d1.get()));
unique_ptr<AbstractWall>wall(dir.get()->MakeArtwork());
//unique_ptr<AbstractWall>wall(dir.MakeArtwork());
//wall->show();
//dir.MakeArtwork();
//wall是d1的成员,非法析构
//delete wall;
//delete d1;
return 0;
}