精华内容
下载资源
问答
  • 显示调用与隐式调用
    千次阅读
    2019-01-23 15:45:36

    有一些函数,你主动的调用了,就是显示调用。
    如果你没有调用,但是这个函数确实被调用了,那它就是被隐式的调用了。
    一般来说,强制转换是隐式调用了构造函数。
    析构函数是隐式调用的,不需要我们主动调用。

    更多相关内容
  • 对函数模板的使用而言,分为两种调用方式,一种是显示模板实参调用(显示调用),一种是隐式模板实参调用(隐式调用)。对于类模板的使用而言,没有隐式模板实参和显式模板实参使用的说法,因为类模板的使用必须显示...

    前言

    前面我们介绍了函数模板的简单使用,但对于函数模板生成具体函数的时机我们并不知道。实际上,我们前面都采用了隐式实例化的方式来生成模板函数。

    模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程。对于函数模板而言,模板实例化之后,会生成一个真正的函数。而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始化。模板的实例化分为隐式实例化和显示实例化。

    对函数模板的使用而言,分为两种调用方式,一种是显示模板实参调用(显示调用),一种是隐式模板实参调用(隐式调用)。对于类模板的使用而言,没有隐式模板实参和显式模板实参使用的说法,因为类模板的使用必须显示指明模板实参。各个概念请勿混淆。

    首先定义函数模板:

    template <class T>
    const<
    展开全文
  • 类的析构函数调用方式堆和栈结论系统在什么情况下不会自动调用析构函数呢?举例参考 堆和栈 为了理解这个问题,我们必须首先弄明白“堆”和“栈”的概念。 堆区(heap) —— 一般由程序员分配释放, 若程序员不...

    堆和栈

    为了理解这个问题,我们必须首先弄明白“堆”和“栈”的概念。
    堆区(heap) —— 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    栈区(stack)—— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    我们构造对象,往往都是在一段语句体中,比如函数,判断,循环,还有就直接被一对“{}”包含的语句体,这就是有时候为了使得类被析构掉,只使用一对{}来欺骗程序,使得析构函数被调用。这个对象在语句体中被创建,在语句体结束的时候被销毁。问题就在于,这样的对象在生命周期中是存在于栈上的。也就是说,如何管理,是系统完成而程序员不能控制的。所以,即使我们调用了析构,在对象生命周期结束后,系统仍然会再调用一次析构函数,将其在栈上销毁,实现真正的析构。总之,隐式调用析构函数的前提是类的创建是在栈上,而不是堆上。
    所以,如果我们在析构函数中有清除堆数据的语句,调用两次意味着第二次会试图清理已经被清理过了的,根本不再存在的数据!这是件会导致运行时错误的问题,并且在编译的时候不会告诉你。

    结论

    1.显式调用的时候,析构函数相当于的一个普通的成员函数。
    2.编译器隐式调用析构函数,如分配了对内存,显式调用析构的话引起重复释放堆内存的异常。
    3.把一个对象看作占用了部分栈内存,占用了部分堆内存(如果申请了的话),这样便于理解这个问题。
    4.系统隐式调用析构函数的时候,会加入释放栈内存的动作(而堆内存则由用户手工的释放)。
    5.用户显式调用析构函数的时候,只是单纯执行析构函数内的语句,不会释放栈内存,摧毁对象。

    系统在什么情况下不会自动调用析构函数呢?

    如果对象被建立在堆上,系统就不会自动调用。一个常见的例子是new…delete组合。但是好在调用delete的时候,析构函数还是被自动调用了。很罕见的例外在于使用布局new的时候,在delete设置的缓存之前,需要显式调用的析构函数,这实在是很少见的情况。

    举例

    创建一个类指针
    Pitch *thee3 = NULL;
    创建函数的返回值是类指针,Pitch *thee = new Pitch(); thee就是函数的返回值,由于类指针在函数内用new来创建,说明thee是被创建在了堆上,thee3生命周期结束后,析构函数不被隐式调用,需要程序员自己释放,此时有2个方法可以解决:1.显示调用析构函数thee3->~Pitch(); 2.使用delete thee3;让delete函数去调用析构函数。

    参考与致谢

    本文参考且大部分拷贝于 http://blog.sina.com.cn/s/blog_bd60c3f4010188g5.html
    在此向原文作者致谢~

    展开全文
  • java 显示调用和隐式调用 示例

    千次阅读 2018-03-26 21:14:37
    /** * java 显示调用和隐式调用 * @author raytseng * */class grandfather { public grandfather() {  System.out.println("调用grandfather的无参构造函数"); } public grandfather(String ...

    /**

     *  java 显示调用和隐式调用

     * @author raytseng

     *

     */

    class grandfather {

      public grandfather() {

      System.out.println("调用grandfather的无参构造函数");

      }

      public grandfather(String name) {

      this();//调用无参构造函数

      System.out.println("调用grandfather的带一个参数的构造函数 name:"+name);

      }

      {

      //非静态初始化块

      System.out.println("调用grandfather的非静态初始化块");

      }

    }


     class father extends grandfather{

    public father() { 

    System.out.println("调用father的无参构造函数");

    }

    public father(String name) {

      super(name);  //显示调用父类构造函数

    System.out.println("调用father的带一个参数的构造函数 name:"+name);

      }

    public father(String name,int age) {

    this(name);  //显示调用当前类的其他构造函数

    System.out.println("调用father的带两个参数的构造函数 name:"+name+" age:"+age);

    }

    {

      //非静态初始化块

      System.out.println("调用father的非静态初始化块");

      }

    }

     

     class son extends father{

    public son() {

    super("tseng", 28);//显示调用父类构造函数

    System.out.println("调用son的无参构造函数");

    }

    public son(int height) {

    this();  //显示调用当前类的其他构造函数

    System.out.println("调用son的带新的参数构造函数: "+height);

    }

    {

      //非静态初始化块

      System.out.println("调用son的非静态初始化块");

      }

     

     }

     


    //测试类

    public class initTest {

    public static void main(String[] args) {

    new son(126);

    }

     

    }


    从上到下依次调用为下面所示:

    调用grandfather的非静态初始化块

    调用grandfather的无参构造函数

    调用grandfather的带一个参数的构造函数 name:tseng

    调用father的非静态初始化块

    调用father的带一个参数的构造函数 name:tseng

    调用father的带两个参数的构造函数 name:tseng age:28

    调用son的非静态初始化块

    调用son的无参构造函数

    调用son的带新的参数构造函数: 126



    展开全文
  • 子类显示调用父类带参构造函数
  • Activity的隐式调用和显示调用

    千次阅读 2016-08-29 14:39:36
    而Intent主要负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,然后Android据此Intent的描述来找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent分为两种: 显式Intent(Explicit ...
  • C++函数模板的显示调用与隐式调用

    千次阅读 2016-04-22 14:28:39
    C++函数模板可以显示调用与可以隐式调用首先定义函数模板:template inline const T& c_max (const T& a, const T& b) { return a ; }那么隐式调用也就是隐式的参数类型推导,根据参数类型决定函数模板的编译,如...
  • 显示调用和隐式调用

    千次阅读 2014-08-18 10:41:19
    首先动态库分为显示调用和隐式调用,这个的区别呢,显示调用需要Loadlibray和freelibrary,隐式调用不需要Loadlibrary和freelibrary,只是需要导入相关的lib文件,因此,如果动态库下面包含有静态对象的话,显示调用...
  • 析构函数为什么不能显示调用

    千次阅读 2018-04-25 10:09:18
    今天和大家分享一个我在定义类的析构函数时,发现不能显示调用我定义的析构函数,这是为什么呢??#include&lt;iostream&gt;using namespace std;#include&lt;string.h&gt;class String{public: ...
  • java 隐式调用和显示调用

    千次阅读 2014-10-09 10:02:31
    当我们在调用lei
  • 关于c++显示调用析构函数的陷阱

    千次阅读 2017-07-12 22:29:16
    关于c++显示调用析构函数的陷阱 版权声明:欢迎转载,注明出处就好!如果不喜欢请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步!!   目录(?)[+]   一、文章来由 现在在写一个项目...
  • 一、隐式调用 1.第三方app:manifest中配置能接受Scheme方式启动的 &lt;activity android:name=".MainActivity"&gt; &lt;intent-filter&gt; &lt;action android:name="...
  • 使用xcode进行模拟器调试时,出现crash后,很多时候往往无法显示出正确的调用栈信息, 往往只能显示最初始的main函数调用,类似下图1  图 1  有个简单的解决办法如下:  xcode->view->Navigators->...
  • C/C++中的显示调用和隐式调用

    千次阅读 2013-07-26 15:36:20
    C/C++中的显示调用和隐式调用: (1)、显示调用  显示调用是指在程序中能找到相应的调用代码,或者说是手动调用的 (2)、隐式调用  隐式调用是指程序中找不到相应的调用代码,或者说是编译器自动调用的  类的...
  • 当用创建好的对象显示调用构造函数时, 对象指向的动态内存更新显示调用时所分配的, 对象生命周期结束时析构函数所释放掉的是后一次分配的动态内存, 也就是说创建对象时隐式构造函数调用所分配的那块内存泄漏了....
  • Qt调用第三方库一般有两种方式,显示和隐式。这里主要介绍显示调用CAN卡第三方库,还介绍一般隐式调用方法。
  • 显示 js 调用堆栈

    千次阅读 2018-12-07 11:48:12
    个人应用上的理解,错误的地方非常多,做好心理准备再看 堆 &amp;amp;&amp;amp; 栈 堆: 一般通常是一个可以被...栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。 堆则是...
  • 显示调用DLL出现126错误

    千次阅读 2018-10-24 16:43:31
    显示调用DLL,特别要注意的是,DLL的路径和函数的名称。如果DLL的路径没有问题,还是出现126错误(未指定的模块),一般可能是该DLL需要依赖某些其他DLL库,特别是MFC类型的DLL,当采用动态编译时,就会因为缺少mfc...
  • C/C++ dll的隐式调用与显式调用

    千次阅读 2021-11-22 16:20:36
    静态编译的优点是编写出来的程序不需要调用DLL和载入函数,直接可以当成程序的一部分来使用。 静态编译的缺点也是显而易见的,使用静态编译的程序体积会比动态编译大,原因是函数的实现被嵌入为程序代码的一部分。 ...
  • android Fragment再次显示调用的方法

    千次阅读 2019-04-03 15:43:26
    @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); Log.e(TAG, "onHiddenChanged:1 " ); if (this != null && !hidden) { ...
  • vs 2019 显示方法被调用次数

    万次阅读 多人点赞 2020-01-19 14:05:48
    VS 是一个很强大的编译器 以前都是根据方法 名Ctrl+F 搜索 很不方便 但VS已经有方便的提示功能了 设置方法 工具>>文本文本编译器>>所有语言>>CodeLens >> 选择启用Code了Lens ......
  • WIN10开机显示调用的对象已与其客户端断开连接解决方法之一 有关windows系统开机输入密码后显示“被调用的对象已与其客户端断开连接”的原因具体有几种不是太清楚,不过参照其他帖子的思路,联想自己的近期行为,...
  • Java 显示调用和隐式调用

    千次阅读 2015-07-26 16:55:46
    举个例子: package com.test6;//显示调用和隐式调用原则//定义一个生物类 class Creature{ { System.out.println(“Creature的非静态初始化块”); } //两个构造器 public Creature(){ ///
  • 显示 调用 基类的构造方法
  • 显式调用与隐式调用

    万次阅读 2018-09-27 12:46:10
    前面课程已经多次演示了显式调用和隐式调用,本节我们集中对这两种调用方式进行讲解。 1、显式调用 我们通过Intent调用组件时,可以直接指定组件类,这种方式称为显式调用,下面给出一段代码,显式调用一个...
  • 通过使用Qt开发框架,生成dLL动态库,供MFC执行程序调用。实现MFC调用Qt界面显示
  • C++子类显示调用父类的构造函数

    万次阅读 2009-08-12 00:04:00
    加入有父类是这样定义的:   class CA { public: CA() { cout ; } CA(int k) {cout , k is " ; m = k;}; virtual ~CA() { cout ; } void output() { cout ;...这就是在子类中显示调用父类的构造函数
  • 在操作电脑的过程中,很多用户都遇到过系统提示远程调用过程失败且未执行的情况,那这是怎么回事呢?其实这是由于错误操作触发了系统中的保护程序而造成,所以针对这一问题,今天本文为大家整理的就是关于远程调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,636,378
精华内容 1,054,551
关键字:

显示调用