类模板多次实例化会重复定义吗 万方

类模板多次实例化会重复定义吗 万方

问:一个类实例化两次,是不是实例化第二次的时候就把第一次给覆盖了?
  1. 答:不是。实例化类对象时就在托管堆中分配内存存放类对象。实例化多次时,则会在托管堆中同时创建多个类对象。
    你说的可能是这种情况。
    var obj = new object();
    obj = new object();
    则会实例化两个object对象,只是第一个object对象因为不再被引用会被进行垃圾回收。
    你可以搜索'.Net 垃圾回收'查找更多的资料
  2. 答:实例第二次重新分配地址,堆中之前等待GC回收
  3. 答:每一次实例化都分配一个新地址
问:C++ 模版和类为什么可以在每个文件内都定义同名的?
  1. 答:你还是没弄明白类,类,结构体,他只是一个模型,对象才是他的实例,程序在运行时,才给对象分配内存空间,类中只有静态成员,才属于类本身,类中的成员函数,和成员变量,都不占内存的,只有对象才占内存,所以用extern没有意义,本身类就不会实例化里面的成员变量,你想想,如果类里的成员变量是定义的话,定义是要赋初值的,那类的成员变量,岂不是独一份,那对象A和对象B如果是同一个类的对象,不是改A成员的值 要影响到B?
    模板和普通函数完全一样,只是他的类型可以在执行时指定。extern仅仅是做申明变量时使用,一般也只对全局变量用一下,还有就是指定使用C编译器时用。没有人会在类里或结构体中用extern
  2. 答:类和模板只是声明而已,并没有实例化,就和函数声明一样。
    你可以自己实例化两个相同的模板,肯定会报错的。
问:java中如果一个类被多次实例化且用的都是相同的对象名,那么这些对象所在的对象内存空间地址都一样吗
  1. 答:这个问题很简单!不一样的~每一个类实例化都会产生一个对象,放在对内存内,对象名只是引用了其中的一个。当然当jvm认为你已经无法访问得到你创建的对象时,可能会收回那些无用的对象。
  2. 答:如果这些相同的对象名没有人为的变化的话,就是一样的
  3. 答:不一样吧,你把对象ToString()输出下比较…
类模板多次实例化会重复定义吗 万方
下载Doc文档

猜你喜欢