C++拷贝问题

死咸鱼的成长之路 2017-08-10 10:57:43
#pragma once
#include "iostream"
using namespace std;
class teacher
{
public:
teacher(int x,int n);
teacher(teacher& ty);
~teacher(void);
int geta()
{
cout<< "&p=" <<&p<<endl;
return a;
}

private:
int a;
int count;
int *p;
};

teacher::teacher(int x,int n)
{
cout<<"teacher::teacher(int x,int y,int n)"<<endl;
a=x;
count=n;
p=new int[count];

}
teacher::teacher(teacher& ty)
{
cout<<"teacher::teacher(teacher& ty)"<<endl;
a=ty.a;
p=ty.p;
}

teacher::~teacher(void)
{
}
int main()
{
teacher a1(1,5);
teacher a2=a1;
teacher a3(a1);

cout << "a1= "<< a1.geta() <<endl;
cout << "a2= "<< a2.geta() <<endl;
cout << "a3= "<< a3.geta() <<endl;

}

以上是一个拷贝构造函数 的实验代码 在构造函数中new了一个指针p的空间 并且在拷贝的时候p=ty.p; a1对象的p地址赋给a2对象p地址 这样不是两个对象的指针p的地址指向同一个空间吗 或者说两者的地址相同 但是通过打印&p发现 两者 不同 这是为什么
...全文
211 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fussier 2017-08-10
  • 打赏
  • 举报
回复
两者的地址相同说的是存的地址这个值是相同的,你打印出来的 &p 是p的地址,不是两个p的值,所相等的是什么呢? 是 p 和 *p 你打印的 &p 本来就不相等
赵4老师 2017-08-10
  • 打赏
  • 举报
回复
避免多次delete的通用做法: if (a!=NULL) { delete a; a=NULL; }
sdghchj 2017-08-10
  • 打赏
  • 举报
回复
指针也是变量,它的值一般是其它变量的地址。 指向相同变量的不同指针,它们的值是相同的,也就是说它们的值是同一个地址,但它俩本身的地址是不同的。 cout<< "p=" <<p<<endl; 另外,你这样写代码是欠揍的,成员指向指向了堆内存又不删除,内存泄露,如果在析构函数里删除又会导致多次删除同一内存对象。设计上就是错的。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧