构造函数与析构函数!

sms88 2004-01-12 09:11:09
以下程序为什么不是调用构造和析构函数2次?
#include<iostream>
using namespace std;
class stude{
public:
stude(char *str){
cout<<str<<"\n";
};
~stude(){
cout<<"delete"<<"\n";
}
};
int main()
{
stude s=stude("andy");
return 0;
}
...全文
30 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Meyer 2004-01-14
  • 打赏
  • 举报
回复
在C++中
Foo foo = Foo();


Foo foo;
foo = Foo();

有根本的不同
Foo foo = Foo(); 谓之隐式初始化
进似 Foo foo;
但Foo foo;是显示初始化
allen_zhaozhencn 2004-01-13
  • 打赏
  • 举报
回复
1 ,
stude s=stude("andy"); //实质上是: stude s("andy");


2 ,
Stude s;

s = stude("andy"); //此时情况上不同上面: 先构造出一个对象. 然后再进行赋值.

ZeroZZZ000 2004-01-13
  • 打赏
  • 举报
回复
从代码的角度看应该是调用两次,之所以是调用一次应该是编译器在编译期优化的结果,取消了中间变量study("andy")直接生成了s,
boy8765 2004-01-13
  • 打赏
  • 举报
回复
标记
sevencat 2004-01-13
  • 打赏
  • 举报
回复
我写错了,不好意思。
gradeyong 2004-01-13
  • 打赏
  • 举报
回复
stude s= 中,此时也调用了构造函数吗,不会吧。我觉得只调用了一次
sevencat 2004-01-13
  • 打赏
  • 举报
回复
stude(char *str){
cout<<str<<"\n";
};
~stude(){
cout<<"delete"<<"\n";
}
这两个函数都不一定能保证被调用。假如是全局变量的话。
liuheliaoshi7879 2004-01-13
  • 打赏
  • 举报
回复
该题是不调用拷贝构造函数的,因为对象=对象,这种表达式只是按对象的数据成员进行顺序赋值,没有初始化的工作,所以不调用拷贝构造函数,其它均同意楼上所说
liuheliaoshi7879 2004-01-13
  • 打赏
  • 举报
回复
长学问
bluebohe 2004-01-13
  • 打赏
  • 举报
回复
stude s=……
默认是走构造函数,并不是=操作符
stude s;
s=……
才是走=操作符
这时候如果s=stude("andy");
的话,是一次构造、一次赋值(没重载=的话走缺省拷贝构造函数)
redhat_xu 2004-01-13
  • 打赏
  • 举报
回复
可以使用推分配的办法.

stude *s=new stude("andy");
不过这样要自己释放内存.
deleted s;

效果和上面一样.
byyyyy 2004-01-13
  • 打赏
  • 举报
回复
同意
tjandy 2004-01-13
  • 打赏
  • 举报
回复
up 楼上的
Jinhao 2004-01-12
  • 打赏
  • 举报
回复
楼上都是正解,外型很像拷贝构造函数,但来得更直接,这为了提高效率
不用理解,只须死记。
Wolf0403 2004-01-12
  • 打赏
  • 举报
回复
stude s=stude("andy");

编译器是作为

stude s("andy"); 这样处理的吧,所以就没有一个额外的临时对象
lifanxi 2004-01-12
  • 打赏
  • 举报
回复
只生成了一个对象,当然只需要一次构造与析构。
shuneng 2004-01-12
  • 打赏
  • 举报
回复
为什么要调用两次呢?
生成对象一次,结束一次罢~~

64,654

社区成员

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

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