拷贝构造函数问题

expresion 2003-08-21 09:58:15
#include<iostream.h>
#include<string.h>
#include<stdio.h>

class Person
{
public:
Person(char* pN);
Person(Person& p);
~Person();
protected:
char* pName;
};

Person::Person(char* pN)
{
cout<<"Constructing "<<pN<<endl;
if(pName!=0)
{
strcpy(pName,pN);
}
}

Person::Person(Person& p)
{
cout<<"Copying "<<p.pName<<" into its own block\n";
pName=new char[strlen(p.pName)+1];
if(pName!=0)
strcpy(pName,p.pName);
}

Person::~Person()
{
cout<<"Destructing "<<pName<<endl;
pName[0]='\0';
delete pName;
}

void main()
{
Person p1("Randy");
Person p2=p1;
}

自定义了一个拷贝构造函数,而且也拷贝了构造函数的资源
为什么我在vc6.0下运行,还是错误啊
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluefile 2003-08-21
  • 打赏
  • 举报
回复
确实是深拷贝,在DEV下可以编译通过,但好像不是该问题



qhgary 2003-08-21
  • 打赏
  • 举报
回复
同上,注意指针一定要分配了空间才能用,所以我说最好定义指针的时候养成一个好习惯
比如char* p = null;这样就不容易错了,一用到没有分配的指针就会有异常null point assignment出现。在释放了空间以后也记得指针复位,让它重新等于null
cdxiaogan 2003-08-21
  • 打赏
  • 举报
回复
哈哈,在拷贝初始化构造函数里面分配了空间
怎么就忘了在构造函数里面分配呢?
:)
sevecol 2003-08-21
  • 打赏
  • 举报
回复
把你的根据char*的构造函数改成
Person::Person(char* pN)
{
cout<<"Constructing "<<pN<<endl;
pName=new char[strlen(pN)+1];
if(pName!=0)
{
strcpy(pName,pN);
}
};

原来的函数没有为pName分配空间就执行strcpy了.

64,282

社区成员

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

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