精华内容
下载资源
问答
  • 析构函数何时被调用

    万次阅读 多人点赞 2018-07-26 15:42:45
    析构函数何时调用 ...对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数调用。 第一种情况 #include <iostream> using namespace std; class A { public: A() { co...

    析构函数何时被调用

    析构函数在下边3种情况时被调用:

    1. 对象生命周期结束,被销毁时;
    2. 主动调用delete ;
    3. 对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。

    第一种情况

    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        A()
        {
            cout << "constructing A" << endl;
        }
        ~A()
        {
            cout << "destructing A" << endl;
        }
    private:
        int a;
    };
    
    void main()
    {
        A a;
    }

    运行结果:

    constructing A
    destructing A

    第二种情况

    如果是new的对象,即使离开了作用域也会一直存在,必须主动delete,否则只有在结束程序时才会执行析构。这里在说下内存泄漏,举个例子

    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        A()
        {
            cout << "constructing A" << endl;
        }
        ~A()
        {
            cout << "destructing A" << endl;
        }
    private:
        int a;
    };
    
    void fun() 
    {
        A *a = new A();
    }
    
    int main() 
    {
        while (1) 
        {
            fun();
        }
        return 0;
    }

    当离开fun时,虽然离开了作用域,但用new动态开辟空间的对象是不会析构的,你可以观察任务管理器,看到内存一直在上升。但你在其他地方确无法使用a所开辟的空间,因为a这个指针是保存在栈上的,当离开作用域后就自动析构(或者说自动消失了),但它所在分配空间是分配在堆上的,只有主动析构或程序结束,才会释放空间,也就是丢失了这块空间的地址,无法操作这块空间了 。

    第三种情况

    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        A()
        {
            cout << "constructing A" << endl;
        }
        ~A()
        {
            cout << "destructing A" << endl;
        }
    private:
        int a;
    };
    
    class C
    {
    public:
        C()
        {
            cout << "constructing C" << endl;
        }
        ~C()
        {
            cout << "destructing C" << endl;
        }
    private:
        int c;
    };
    
    class B : public A
    {
    public:
        B()
        {
            cout << "constructing B" << endl;
        }
        ~B()
        {
            cout << "destructing B" << endl;
        }
    private:
        int b;
        C c;
    };
    
    void main()
    {
        B b;
    }

    运行结果:

    constructing A
    constructing C
    constructing B
    destructing B
    destructing C
    destructing A

    B的析构函数调用之后,又调用了B的成员c的析构函数 。

    若将上边的代码中的main()函数内容改成

     A* a = new B;
    
     delete a;

    我们知道,这将不会调用class B的析构函数不会被调用,所以class C的析构函数也不会被调用。

    运行结果:

    constructing A
    constructing C
    constructing B
    destructing A

    若将class A中的析构函数声明为虚函数 ,这时class B的析构函数也会被调用,例如:

    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        A()
        {
            cout << "constructing A" << endl;
        }
        virtual ~A()
        {
            cout << "destructing A" << endl;
        }
    private:
        int a;
    };
    
    class C
    {
    public:
        C()
        {
            cout << "constructing C" << endl;
        }
        ~C()
        {
            cout << "destructing C" << endl;
        }
    private:
        int c;
    };
    
    class B : public A
    {
    public:
        B()
        {
            cout << "constructing B" << endl;
        }
        ~B()
        {
            cout << "destructing B" << endl;
        }
    private:
        int b;
        C c;
    };
    
    void main()
    {
        A* a = new B;
    
        delete a;
    }

    运行结果:

    constructing A
    constructing C
    constructing B
    destructing B
    destructing C
    destructing A

    此文章参考了:https://blog.csdn.net/weizhee/article/details/562833

    展开全文
  • 调用函数获取被调用函数的源码 import inspect def called_fun(): """被调用函数""" print("this is called fun") def call_fun(): """调用函数""" source_code = inspect.getsource(called_fun) print...

    调用函数获取被调用函数的源码

    import inspect
    
    
    def called_fun():
        """被调用函数"""
        print("this is called fun")
    
    
    def call_fun():
        """调用函数"""
        source_code = inspect.getsource(called_fun)
        print(source_code)
        print(type(source_code))
    
    
    if __name__ == '__main__':
        call_fun()
    
    

    结果:

    在这里插入图片描述

    展开全文
  • 被调用函数调用函数返回值

    千次阅读 2011-10-14 08:55:34
    被调用函数调用函数返回值 一般使用return语句由被调用函数调用函数返回值,该语句有下列用途: 1.它能立即从所在的函数中退出, 返回到调用它的程序中去。 2.返回一个值给调用它的函数。 有两种方法可以终止子...
     
    

    被调用函数向调用函数返回值
    一般使用return语句由被调用函数向调用函数返回值,该语句有下列用途:
    1.它能立即从所在的函数中退出, 返回到调用它的程序中去。
    2.返回一个值给调用它的函数。
    有两种方法可以终止子函数运行并返回到调用它的函数中: 一是执行到函数的最后一条语句后返回;一是执行到语句return时返回。前者当子函数执行完后仅返回给调用函数一个0。若要返回一个值,就必须用return语句。只需在return 语句中指定返回的值即可。例1返回最大值时变为:
    例3: 
    #include<stdio.h> 
    int maxmum(int x, int y, int z); /*说明一个用户自定义函数*/ 
    int main() 

    int i, j, k, max; 
    printf("i, j, k=?\n"); 
    scanf("%4d%4d%4d", &i, &j, &k); 
    max=maxmum(i, j, k); /*调用子函数, 并将返回值赋给max*/ 
    printf("The maxmum value is %d\n", max); 
    getch(); 
    return 0; 
    }

    maxmum(int x, int y, int z) 

    int max; 
    max=x>y?x:y; /*求最大值*/ 
    max=max>z?max:z; 
    return(max); /*返回最大值*/ 

    return语句可以向调用函数返回值,但这种方法只能返回一个参数,在许多情况下要返回多个参数,这是用return语句就不能满足要求。Turob C2.0提供了另一种参数传递的方法,就是调用函数向被调用函数传递的形式参数不是传递变量本身,而是传递变量的地址,当子函数中向相应的地址写入不同的数值之后,也就改变了调用函数中相应变量的值,从而达到了返回多个变量的目的。
    例4: 
    #include<stdio.h> 
    void subfun(int *m, int *n); /*说明子函数*/ 
    int main() 

    int i, j; 
    printf("i, j=?\n"); 
    scanf("%d, %d", &i, &j); /*从键盘输入2个整数*/ 
    printf("In main before calling\n"/*输出此2数及其乘积*/ 
    "i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j); 
    subfun(&i, &j); /*以传送地址的方式调用子函数*/ 
    printf("In main after calling\n"/*调用子函数后输出变量值*/ 
    "i=%-4d j=%-4d i*j=%-4d\n", i, j, i*j); 
    getch(); 
    return 0; 

    void subfun(int *m, int *n) 

    *m=*m+2; 
    *j=*i-*j; 
    printf("In subfun after calling\n" /*子函数中输出变量值*/ 
    "i=%-4d j=%-4d i*j=%-4d\n", *i, *j, *i**j); 
    }


    上例中,*i**j表示指针i和j所指的两个整型数*i和*j之乘积。
    另外,return语句也可以返回一个指针,举例如下。
    下例中先等待输入一字符串,再等待输入要查找的字符,然后调用match()函数在字符串中查找该字符。若有相同字符,则返回一个指向该字符串中这一位置的指针,如果没有找到,则返回一个空(NULL)指针。
    例5: 
    #include<stdio.h> 
    char *match(char c, char *s); 
    int main() 

    char s[40], c, *str; 
    str=malloc(40); /*为字符串指什分配内存空间*/ 
    printf("Please input character string:"); 
    gets(s); /*键盘输入字符串*/ 
    printf("Please input one character:"); 
    c=getche(); /*键盘输入字符*/ 
    str=match(c, s); /*调用子函数*/ 
    putchar('\n'); 
    puts(str); /*输出子函数返回的指针所指的字符串*/ 
    getch(); 
    return 0; 

    char *match(char c, char *s) 

    int i=0; 
    while(c!=s[i]&&s[i]!='\n')/*找字符串中指定的字符*/ 
    i++; 
    return(&s[i]); /*返回所找字符的地址*/ 
    }

    展开全文
  • 简单案例: 模块1中的函数 def add(): print(a) if __name__=='__main__': a=10 ... 模块2中的函数 ...此为模块2调用模块1中的函数,但调用失败,错误...总结:跨模块调用函数时被调用函数内部不能使用全局变...

    简单案例:

    模块1中的函数

    def add():
        print(a)
        
    if __name__=='__main__':       
        a=10
        add()

     模块2中的函数

    from 模块1 import add
    
    a=20
    add()

    此为模块2调用模块1中的函数,但调用失败,错误提示如下:

    总结:跨模块调用函数时,被调用函数内部不能使用全局变量

    展开全文
  • IDEA查看函数调用被调用关系

    千次阅读 2020-03-07 20:01:51
    一问题提出 查看doLogin函数被调用调用关系。 二查看被调用关系 1选择dologin函数 2CTRL+ALT+H 三 查看调用关系
  • 1、查看matlab某函数调用了哪些函数 https://blog.csdn.net/smallcaptain2009/article/details/81195569 https://blog.csdn.net/lusongno1/article/details/54667066 2、查看matlab某函数哪些函数调用...
  • 自定义函数及函数调用

    千次阅读 2019-05-10 12:17:10
    1、自定义函数声明、函数调用、函数实现概念混淆 2、形参和实参混淆; 3、自定义函数参数的传值方式混淆;传来传去都不知道传的到底是什么? 接下来,我就重点围绕道友们常见的问题,说一说: 1、自定义函数声明...
  • 在一个函数中def fun():pass这个函数如何知道是谁调用了它呢? 在C类语言中好像是很难的。但在 python中却很简单import traceback def fun(): s = traceback.extract_stack() print '%s Invoked me!'%s[-2][2]这个...
  • 全栈工程师开发手册 (作者:栾鹏)...【1】函数调用模式 当一个函数并非一个对象的属性,那么它就是当做一个函数来调用的。对于普通的函数调用来说,函数的返回值就是调用表达式的值function add(x,y){ return x
  • 代码没有问题为什么parse不会被调用![![![图片说明](https://img-ask.csdn.net/upload/201711/09/1510159504_917150.png)图片说明](https://img-ask.csdn.net/upload/201711/09/1510159495_85511.png)图片说明]...
  • 我在写一个驱动,在init里面向i2c总线注册了一个结构体,结构体中包含了probe和detect以及remove系列函数,...这几个函数里面只有一句打印,其余的还没有写上去,这是不是probe和detect都没有被调用啊,问题出在哪?
  • 在使用MATLAB过程中,我们难免会遇到函数调用函数的情况,外面的主程序中的变量我们可以在工作区看到,他们的值的变化我们可以清楚的知道,但是主程序中调用的一些函数的变量的值我们却很难知道,此时,我们可以采取...
  • javascript中函数的循环调用

    千次阅读 2017-09-16 17:43:14
    javascript中函数的循环调用
  • JS中的命名函数,匿名函数,自调用函数和回调函数(一). 命名函数:函数如果有名字,就是命名函数function f1(){ console.log("这个函数就是命名函数"); }(二).匿名函数函数如果没有名字,就是匿名函数 ...
  • C++ 之 main函数调用被调用

    千次阅读 2015-09-03 22:08:44
    main函数调用自身吗? 其他函数调用main函数么? 下面先看一段有意思的程序,一个简洁有趣的打印菱形的程序。 [cpp] view plaincopy int line = 1;    int main()  {  ...
  • C++ 函数的递归调用

    万次阅读 多人点赞 2017-02-06 00:11:24
    调用一个函数的过程中又出现直接或间接地调用函数本身,称为函数的递归(recursive)调用。包含递归调用函数称为递归函数。 比如:int test(int x) { int y; y = test(x); return(2*y); } 以上是一个直接...
  • 一般的认为,虚机制发生在对象调用 ,其实不然,只要能用到之,他便会出现!在调用基类函数的时候,如果基类调用了一个虚函数,同样虚机制也会产生效果!看一个程序,没有virtual的情况: #include iostream>...
  • keil c51不编译未调用函数

    千次阅读 2018-03-23 10:04:56
    在用KEIL C51,经常会遇到定义了的函数未调用,编译会发出“UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS”的警告,我们不想手动去删除,也不想这部分代码编译和链接进最终的程序,以免浪费有限的储存空间。...
  • 函数的嵌套调用和递归调用

    千次阅读 2018-12-06 17:04:03
    2,遇函数调用语句,调用函数a,流程转去a函数; 3,执行a函数的开头部分; 4,遇函数调用语句,调用函数b,流程转去函数b; 5,执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作; 6,返回到a函数中调...
  • C语言:函数的递归调用

    万次阅读 多人点赞 2018-07-20 16:14:18
    函数的递归调用:一个函数在它的函数体内,直接或者间接地调用了他本身。 直接递归调用函数直接调用自身。 间接递归调用函数间接调用自身。 如下图: 如下图: 防止递归无休止的进...
  • C语言函数调用

    千次阅读 多人点赞 2019-04-30 14:50:25
    C函数调用 调用格式: 函数名(实参表) 并且应该避免写出与实际参数计算次序有关的调用。 函数调用可以出现在以下两种情况中: 无返回值的函数通常作为表达式语句,即直接在函数调用的后面加一个分号; 有返回值的...
  • C++拷贝构造函数被调用的时机

    千次阅读 多人点赞 2017-07-28 17:41:59
    拷贝构造函数调用的几种情况: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)系统自动调用拷贝构造函数实现拷贝赋值。 2. 若函数的形参为类对象,调用函数,实参赋值给形参,系统自动调用拷贝构造...
  • Flask函数无法调用

    千次阅读 2019-11-10 17:24:59
    场景一:一般的函数调用 报错:name’test’ is not defined 原因:python中函数调用需要先定义后才能调用。 场景二:函数中调用函数 当函数中调用函数是可以不考虑调用函数的前后顺序 场景三:同名函数调用 ...
  • 我们一般将字符串、列表等变量作为参数进行函数调用。但函数本身也是一个对象,所以我们也可以将函数作为参数传入另外一个函数中并进行调用。 本关的目标是让读者了解并掌握函数作为参数传入另外一个函数中并进行...
  • 函数嵌套调用

    千次阅读 2020-09-07 12:14:20
    就是说:函数调用了函数;那么,我们称为:函数嵌套调用。 注意:不能够在函数中定义函数,就是不能够“嵌套定义函数”。我们不可以把func函数的定义放在main函数的定义中。例如: intmain(intargc, char* argv[])...
  • Android studio 如何查看正断点函数那个函数调用 使用了一段时间android studio开发的今天,我在调试代码,程序执行到我打断点的函数,真不巧,我那个函数,有很多调用的地方,但我不知道它那处调用的,我就...
  • 确定重载函数被调用的依据

    千次阅读 2017-03-05 09:45:37
    由于今天做了道面试题,题目是:系统在调用重载函数时,能作为确定那个重载函数被调用的依据是() 我选的是A函数返回类型,正确答案是B参数个数。 查阅书籍之后发现重载函数的定义是:同一个类中包含了两个或两个以上...
  • 计算斐波那契数列第n项的函数定义如下: int fib(int n){ if(n==0) return 1; else if(n==1) return 2; ... return fib(n-1)+fib(n-2);...请问fib(1)-fib(9)各调用 多少次fib函数 解答: 对于小数...
  • unity3d OnMouseDown()函数被调用

    万次阅读 2015-11-18 16:51:23
    由于这个不针对特定GameObject,一开始我将这个脚本挂载在摄像机上,结果运行后,点击鼠标,并没有输出Mouse,说明没调用到OnMouseDown函数。后面我把该脚本放到场景中一个物体上,运行后发现,只有点击该物体,才...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,283,945
精华内容 1,713,578
关键字:

函数未被调用时