这个对像何时构析?

XueBoy163 2005-05-03 03:11:15
class a
{
int data;
a(int a)
{
data = a;
}
}
void main()
{
fun(a(2));
}

用a(2)建立的对象何时构析
...全文
120 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric8231 2005-05-04
  • 打赏
  • 举报
回复
CString("123")在这里是临时对象,至于它何时析构,还要取决于GetTextExtent( ) 的参数的类型。

如果GetTextExtent( )的参数定义为引用类型,CString("123")将拥有与引用它的那个参数一样长的生命期;如果GetTextExtent( )的参数定义为值类型,CString("123")将在本语句结束后析构
xialin168 2005-05-04
  • 打赏
  • 举报
回复
class a
{
int data;
a(int a)
{
data = a;
}
}
void main()
{
fun(a(2));
}

用a(2)建立的对象何时构析过且过 这个样子构造都不能,更不会析构啦!

fun(a(2)); 会在编译时刻错误,calss a 的构造函数是私有的,只有它的友元才能调用;
XueBoy163 2005-05-03
  • 打赏
  • 举报
回复
实际问题是
CDC::GetTextExtent():
我常这样取一个字体的高.
int cy;
cy = pDC->GetTextExtent(CString("123")).cy;
编译通过
qhfu 2005-05-03
  • 打赏
  • 举报
回复
发现可用 :)
#include <iostream>
using namespace std;
class A
{
public:
int data;
int *i;

A(int a)
{
i = new int(12);
cout<<"an object of a constructed\n";
data = a;
}
~A()
{
delete i;
cout<<"an object of a destoried\n";
}
};


void fn(A i)
{
cout<<"fn()\n";
}


int main()
{
cout<<"main()\n";
fn(A(2));

system("pause");
return 0;
}
zhousqy 2005-05-03
  • 打赏
  • 举报
回复
构造函数没有返回值怎么能当参数使?
astrophor 2005-05-03
  • 打赏
  • 举报
回复
把上面那个程序改了下
看结果就知道了,是当函数结束时析构的
结果中还有一个析构是那个临时变量的析构调用
是因为函数是按值传递
当你改成按引用传递时就没了

#include <iostream.h>
#include <stdio.h>
class a
{
public:
int data;
a(int a)
{
printf("an object of a constructed\n");
data = a;
}
~a()
{
printf("an object of a destoried\n");
}
};
void fn(a x)   // void fn( a & x) 这个是按引用
{
printf("fn()\n");
}
void main()
{
printf("main()\n");
fn(a(2));
}
qhfu 2005-05-03
  • 打赏
  • 举报
回复
fun(a(2));//这个调用不成立! :)
xfxf521 2005-05-03
  • 打赏
  • 举报
回复
刚刚准备退出fun(){}函数但还没有完全退出时构析该对象!!
bing_huo 2005-05-03
  • 打赏
  • 举报
回复
fun(a(2));

这行执行完 临时对象就被销毁了
qhfu 2005-05-03
  • 打赏
  • 举报
回复
对象不再用的时候构析,编译器自动调用构析函数
WingForce 2005-05-03
  • 打赏
  • 举报
回复
class a
{
int data;
a(int a)
{
printf("an object of a constructed\n");
data = a;
}
~a()
{
printf("an object of a destoried\n");
}
}
void fn(a x)
{
printf("fn()\n");
}
void main()
{
printf("main()\n");
fun(a(2));
}

64,683

社区成员

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

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