请问下大家,复制构造函数和带一参数的普通构造函数有什么区别

touchwhat 2009-03-25 07:51:32
请问下大家,复制构造函数和带一参数的普通构造函数有什么区别


还有用了计数类了后怎么 确定多个指针同时指向同一对象时 删除了一个对象而不会产生悬垂指针的?。。
比如
int *ip=new int(42);
Has Ptr(ip,10);
delete ip;
ptr.set_ptr_val;//因为ip和ptr中的指针指向同一个对象,释放了ip后 ptr不再指向有效的对象,产生悬垂指针。
加了计数类后怎么确定不会悬垂指针?。。。。。
...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tab0tab 2009-03-25
  • 打赏
  • 举报
回复
class count
{
public:
int count;
}

class a
{
public:
a(a & b)
{
a.d = b.d;
}

a(data c)
{
d = c;
}

data d;

count c;//计数类

operator=(a b)
{
c.count++;
}

计数指针删除
void Release()
{
c.count--;
if(c.count == 0)
delete this;
}

}
cyldf 2009-03-25
  • 打赏
  • 举报
回复
vector<a> ivec(3);//这句里面都调用什么了?。。会调用默认构造函数吗。。还是直接就复制构造函数,依次复制容器里面的3个元素?


应该是合成复制构造函数吧,vector作为一个类,首先调用复制构造函数,a调用自己的复制构造函数。

c++菜鸟,请大家指正。
touchwhat 2009-03-25
  • 打赏
  • 举报
回复
谢谢大家,复制构造函数的形式就以下main里面这几种:?



class a
{
a(){cout<<"construct"<<endl;};
a(const a&){cout<<"Copy consruct"<<endl;}
a &operator=(const a &)
{cout<<&operator=(const a&)}
}
int fun(a obj)
{

}
int fun2()
{
a obj;
return obj;

}
int main()
{
a ebj;
fun(ebj);//会调用复制构造函数,作为对象的副本返回函数
ebj=fun2();//先调用默认构造函数,然后在fun2函数要返回时会调用复制构造函数,
//然后调用析构函数,最后调用赋值构造函数,再析构函数。
//我这里以为对象里面的工作全部完成后再依次析构函数,怎么调用了复制构造函数就要马上会析构吗

//还有以下一种形式
vector<a> ivec(3);//这句里面都调用什么了?。。会调用默认构造函数吗。。还是直接就复制构造函数,依次复制容器里面的3个元素?
}










帮我看看谢谢了~!!!!!
  • 打赏
  • 举报
回复
复制构造函数和带一参数的普通构造函数有什么区别

拷贝构造一般会深拷贝数据。

还有用了计数类了后怎么 确定多个指针同时指向同一对象时 删除了一个对象而不会产生悬垂指针的?。。
这里必须用智能指针,只有当最后一个指向该数据的指针被析构,才能删除该对象
皮蛋C 2009-03-25
  • 打赏
  • 举报
回复
拷贝构造函数和赋值函数,这些都是每个类默认有的, 如果你的类成员含有指针,就最好把这两个重写.
这两个函数的目的是为了让你自己定义的类能像内置类型(int,double...)等有同样的,人们都习惯的操作.如int a,b; a=b.
带参的构造函数在你定义该类对象时用.

还有用了计数类了后怎么 确定多个指针同时指向同一对象时 删除了一个对象而不会产生悬垂指针的?
这个应对同一个类才有意义, 定义一个引用计数int nCount. 当创建指针时加1,以后该指针每次拷贝都让其加1, 每次释放让其减1,当nCount=0时,就delete该指针.

int *ip=new int(42);
Has Ptr(ip,10); 这个跟计数无关的, 在你传递ip给ptr时,应让ptr产生个新的int*
wgzymzx 2009-03-25
  • 打赏
  • 举报
回复
复制构造函数是用来复制当前对象的,在需要执行赋值(=)时,将当前
对象的内容完全复制到另一个变量中。复制构造函数的参数是当前类
的一个引用。实现类似拷贝的一个功能。
带一参数的普通构造函数,是用来创建一个新的对象的。它是从无到有
的一个过程。
Rain208 2009-03-25
  • 打赏
  • 举报
回复
在构造一个指针
然后把ip的地址传给它

64,637

社区成员

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

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