问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++自定义类型中有个vector容器,容器里面是一些指针,如何写这个类的复制...

发布网友 发布时间:2024-04-07 17:25

我来回答

1个回答

热心网友 时间:2024-07-22 12:11

//c++自定义类型中有个vector容器,容器里面是一些指针,如何写这个类的复制构造函数和重载=符?
#include <vector>
#include <iostream>
using namespace std;

class Element
{
public:
Element(int data) {
cout<<__FUNCTION__<<" is called."<<endl;
m_data = data;
}
~Element() {
cout<<__FUNCTION__<<" is called."<<endl;
}
void show() const {
cout<<m_data<<endl;
}
private:
int m_data;
};

class Foo
{
public:
Foo() {
cout<<__FUNCTION__<<" is called."<<endl;
}
~Foo() {
cout<<__FUNCTION__<<" is called."<<endl;
for (int i = 0; i < m_elms.size(); ++i)
delete m_elms.at(i);
m_elms.clear();
}

Foo(const Foo& other) {
cout<<__FUNCTION__<<" is called."<<endl;
for (int i = 0; i < other.m_elms.size(); ++i) {
Element *p1 = other.m_elms.at(i);
Element *p2 = new Element(*p1);
m_elms.push_back(p2);
}
}
Foo &operator=(const Foo &other) {
cout<<__FUNCTION__<<" is called."<<endl;
if (&other != this) {
for (int i = 0; i < m_elms.size(); ++i) {
delete m_elms.at(i);
}
m_elms.clear();
for (int i = 0; i < other.m_elms.size(); ++i) {
Element *p1 = other.m_elms.at(i);
Element *p2 = new Element(*p1);
m_elms.push_back(p2);
}
}

return *this;
}

void addElem(Element *elem)
{
m_elms.push_back(elem);
}

void show() {
cout<<"Foo::show:"<<endl;
for (int i = 0; i < m_elms.size(); ++i)
m_elms.at(i)->show();
cout<<endl;
}
private:
vector<Element *> m_elms;
};

int main()
{
Foo *foo1 = new Foo();;
foo1->addElem(new Element(1));
foo1->addElem(new Element(2));
foo1->addElem(new Element(3));
foo1->show();
delete foo1;
cout<<"----------------"<<endl;

foo1 = new Foo();
foo1->addElem(new Element(11));
// copy constructor called
Foo *foo2 = new Foo(*foo1);
foo2->addElem(new Element(8));
foo1->show();
foo2->show();
cout<<"-----------------"<<endl;
delete foo1;
foo2->show();
cout<<"-----------------"<<endl;

Foo *foo3 = new Foo();;
// = called
*foo3 = *foo2;
foo3->show();

*foo3 = *foo2;
foo3->show();

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 火锅餐厅厨房有哪些 小火锅厨房设备有哪些 ...vector的sort算法对元素是自定义类型进行排序 对你不止是喜欢电视剧男二和女二在一起吗 花间令女二男二是一对吗 郯城县核酸检测实验室在哪 率土之滨公孙瓒和曹纯能组吗 东北人西的拼音 ...里面的“出生率”,“死亡率”中的总人数包括出生,死亡人数吗?_百度... 出生率怎么算? 有没有分期时间长一点的贷款 我脚上这个跖疣很严重吗?怎么根治? pc7是什么材料? 是否有个家男宝宝带家字的名字大全 ...可一年多的感情叫我怎么放的下,我该怎么办。。 我有个女朋友坐了3年牢出来的 你说我能跟她在一起吗?(我真的很爱她... ...我们关系很好的,我现在29岁,我不知道以后该怎么办 ...犯法了要入狱五年,这让我痛不欲生手足无措,好无助;我该怎么办... 电脑版全民k歌怎么老是出错? 问一下这只派克钢笔的型号及价钱 派克钢笔怎么样?有哪位知道这个钢笔的型号和价格? 这只派克钢笔多少钱? 秀丽在后面的成语是什么 迟来的爱简谱萨克斯教学迟来的爱简谱歌谱 有一首歌是天空又下起了白雪 ...聊QQ他说没有我陪在他身边 他的情人节过得不快乐。我该怎么回... 炒猪腰片怎么做爆炒猪腰的做法 淮山猪腰汤怎么做淮山猪腰汤的做法介绍 高一会考考哪几门? 孕妇可以吃二丁颗粒吗 心脏病患者吃啤酒烧鸭能吃吗 口苦,便秘,屁多腹胀,睡觉不踏实,有什么药物可以 中国粮食自给率多少2021 国美附中国际部招生对象要求? 和优秀的人在一起,就算你不优秀,但也不会太差 上海有哪些大的汽车油漆公司 上海哪里有做全车油漆的(桑塔纳) 大理州实验中学到大理一中怎么做公交车? (2013?大理州模拟)在实验室里进行如图所示的实验,当看到红色变成无色是... 英语听力练习材料:哈尔滨冰雪节 你好怎么样才能看到防:.漏气燃气灶真假? 从洋务运动到戊戌变法期间的重要制度调整有哪些?