关于main作为友元函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 01:20:25
#include <string>
#include <iostream>

using namespace std;
class A
{
private:
static int a;
static int i;
public:
A()
{
++a;
cout<<"Construct the "<<a<<" times"<<endl;
}
~A()
{
cout<<"Destructed the "<<(++i)<<" times"<<endl;
}
friend int main(int argc, char *argv[], A temp);
};
int A::a=0;
int A::i=0;
int main(int argc, char *argv[], A temp)
{
A a;
A b;
A c;
return 0;
}
执行时,只执行了3次构造,却执行了4次析构;也就是说temp没有执行构造函数却执行了析构函数,迷惑中,愿与大家分享难题,也希望知道的同学能告诉我。

//先说总结吧
//1 函数应该销毁传进来的值
//2 函数应该销毁自己造的值
//3 函数不能销毁进来的引用
//4 复制值时如果这个值的类型有以自身类型的引用为唯一参数的构造函数,则复制
// 时将采用它进行复制,否则直接复制内存
//5 制造引用不需要构造新的值
//6 参数可以被凭空捏造
//7 参数可以被无情忽略

//其实4中引用的部分和3和5总是同时存在的,所有没说全的其实也包含了这些全部或部分

//根据上的说法,你的temp是由凭空捏造而来的(即没进行构造),但是根据法则1,你的规矩的main是必须要履行销毁的责任的。

//下面是对以上各项说法正证明,花点事件看看吧,至少说明了你的temp哪里来的,以及其他各种情况

//另:射雕英雄先生 - 童生 一级 所说的为代码失误(残疾代码),我所说的捏造指不良代码(包括类似善良的唐僧(操作系统)被扔进女儿国(残疾代码(只有女人是性别残疾转生殖残疾))成为国家安定隐患(程序崩溃)这种情况)通过非正常途径搞活动的行为(没制造temp就对你说temp已经到位了)。

#include <string>
#include <iostream>

using namespace std;
class A
{
private:
static int a;
static int i;
public:
A()
{
++a;
cout<<"Construct the "<<a<<" times"<<endl;
}
~A()
{
cout<<"Destructed the "<<(++i)<<" times"<<endl;