临时对象与复制构造函数问题

秦帅 2019-04-06 10:59:14
#include"Stringbad.h"
#include<cstring>
int stringbad::numbers = 0;

stringbad::stringbad()
{
numbers++;
len = 4;
str = new char[len];
strcpy(str, "c++");
std::cout << "is numebr " << numbers << " " << str << std::endl;
}
stringbad::stringbad(const char * s)
{
numbers++;
len = strlen(s);
str = new char[len + 1];
strcpy(str, s);
std::cout << "is numebr " << numbers << " " << str << std::endl;
}
std::ostream& operator<<(std::ostream &os, const stringbad & a)
{
os << a.str << std::endl;
return os;
}
stringbad::~stringbad()
{
numbers--;
std::cout << "numebr is" << numbers << " is delete " << str << std::endl;
delete[]str;
}




stringbad a = "i will find you";
cout << a;






当我如此创建stringbad对象,先调用构造函数生成临时对象,然后会调用默认复制构造函数,但我认为在cout前,临时对象已经被delete,所以cout<<a输出会出问题,但经过测试,输出没有问题。这是为何?
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2019-04-07
  • 打赏
  • 举报
回复
引用 2 楼 秦帅 的回复:
[quote=引用 1 楼 真相重于对错的回复:]你那个不叫复制构造函数
其次你传给operator<<的是引用,因此也没有临时对象。
再有a只有在它的生存期结束后才会被回收。
所以不存在你说的现象。

第一个语句不是先使用构造函数创建临时对象么?然后在调用 默认复制构造函数 将临时对象的值赋给a?[/quote]
建议看一下c++的基础教程,概念不要靠自己脑补。
coo135 2019-04-07
  • 打赏
  • 举报
回复
理解有误~~~

stringbad a = "i will find you";直接调用重载的构造函数tringbad::stringbad(const char * s) 创建对象。不存在临时对象的~~~
秦帅 2019-04-07
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错的回复:
你那个不叫复制构造函数
其次你传给operator<<的是引用,因此也没有临时对象。
再有a只有在它的生存期结束后才会被回收。
所以不存在你说的现象。
第一个语句不是先使用构造函数创建临时对象么?然后在调用 默认复制构造函数 将临时对象的值赋给a?
真相重于对错 2019-04-07
  • 打赏
  • 举报
回复
你那个不叫复制构造函数
其次你传给operator<<的是引用,因此也没有临时对象。
再有a只有在它的生存期结束后才会被回收。
所以不存在你说的现象。
marslycan 2019-04-07
  • 打赏
  • 举报
回复
你都有代码 调试一下不就知道了

64,282

社区成员

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

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