- 主题:这种直接在构造函数里边执行操作的会产生什么行为?
比如下面的代码
struct FO
{
FO() { a = 5; printf("a = %d\n", a);
int a;
operator int() { return a;}
};
int main()
{
int retv = FO();
return retv;
}
到底会不会为FO对象分配栈上的内存? 是不是获取完毕retv之后, FO临时对象就销毁了?
--
修改:hyperLee FROM 120.244.224.*
FROM 120.244.224.*
写了个小代码测试一下, g++的, 确实是即时创建和销毁的.
#include <iostream>
using namespace std;
bool myfunction (int i,int j) { return (i<j); }
struct myclass
{
myclass()
{
printf("myclass::myclass()\n");
}
~myclass()
{
printf("myclass::~myclass()\n");
}
operator int() { return a;}
int a = 5;
} ;
int main ()
{
cout << "myvector contains:"<<endl;
int retv = myclass();
cout << "mark2"<< " retv = " << retv <<endl;
return 0;
}
---------------------------------------
$ ./a
myvector contains:
myclass::myclass()
myclass::~myclass()
mark2 retv = 5
【 在 hyperLee (老李) 的大作中提到: 】
: 比如下面的代码
: struct FO
: {
: ...................
--
FROM 120.244.224.*
继续测了一下, 发现如果明确写出 myclass cls; 那么这个cls会在函数返回时候才销毁.
但是主帖里边的做法, 好像在c++中还真找不出规则来. 未定义行为?
【 在 hyperLee (老李) 的大作中提到: 】
: 写了个小代码测试一下, g++的, 确实是即时创建和销毁的.
: #include <iostream>
: using namespace std;
: ...................
--
FROM 120.244.224.*