拷贝构造函数中如何调用构造函数

xuegao007 2008-03-18 10:30:21
main.cpp
Array<int> arr1(12);
Array<int> arr2(arr1);

head.cpp
template<class TYPE>
Array<TYPE>::Array(int size)
{
_size = size;
pArray = new TYPE[_size];
if (pArray != NULL)
{
memset(pArray, 0, _size * sizeof(TYPE));
}
}

template<class TYPE>
Array<TYPE>::Array(const Array& Arf)
{
Array(Arf.size());//在这我想调用构造函数。意思是先把arr2初始为空,并且通过构造函数分配空间。
//这样写肯定不行,因为是建立一个临时对象,我该怎么写呢。this->Array和(*this).array都不行的。请教
memcpy(pArray, Arf.getparray(), Arf.size() * sizeof(TYPE));
}
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2008-03-18
  • 打赏
  • 举报
回复
不可以。没什么为什么,C++就这么规定的。它不是java、C#。
承受少少的代码重复,或者把相同操作提到公共函数里。
Jim_King_2000 2008-03-18
  • 打赏
  • 举报
回复
理论上说,可以用placement new来达到这样的目的:
new (this) Array(Arf.size());

但最好还是不要这么做。直接在copy constructor里面写代码比较好。
hai040 2008-03-18
  • 打赏
  • 举报
回复
delete pArray;
_size = Arf.size();
pArray = new TYPE[_size()];
memcpy(pArray, Arf.getparray(), _size() * sizeof(TYPE));
xuegao007 2008-03-18
  • 打赏
  • 举报
回复
大家辛苦了,我的意思是可不可以这样调用构造函数,如果不可以,为什么? 并不是解决这个问题的其他方法。谢谢大家了。
paidfighting 2008-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuegao007 的回复:]
还有,是不是除了建立临时对象外,其他时候都不能调用构造函数啊,因为调用一次构造函数,就有一个析够函数与其相对应。这样理解对吗。大家指点!
[/Quote]

对,构造函数一般不显式调用
独孤过儿 2008-03-18
  • 打赏
  • 举报
回复
你直接在copy constructor中初始化不就行了吗!

还有,什么时候构造函数可以由程序员显示的调用了?
paidfighting 2008-03-18
  • 打赏
  • 举报
回复
不用调用构造函数啊

这样就可以

_size = Arf.size();
pArray = new TYPE[_size];
if (pArray != NULL)
{
memcpy(pArray, Arf.getparray(), Arf.size() * sizeof(TYPE));
}

xuegao007 2008-03-18
  • 打赏
  • 举报
回复
还有,是不是除了建立临时对象外,其他时候都不能调用构造函数啊,因为调用一次构造函数,就有一个析够函数与其相对应。这样理解对吗。大家指点!

64,636

社区成员

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

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