首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建指针时是否没有构造函数调用?

创建指针时不会调用构造函数。

在C++中,指针是一种特殊的数据类型,用于存储变量的内存地址。当我们创建一个指针变量时,它只是分配了足够的内存来存储一个地址,并没有调用构造函数。

构造函数是用于初始化对象的特殊成员函数,它在创建对象时自动调用。它负责为对象的成员变量分配内存并进行初始化。然而,指针只是存储了一个地址,并没有实际的对象需要初始化,因此不会调用构造函数。

需要注意的是,如果我们使用指针来创建一个对象,并且希望调用对象的构造函数进行初始化,我们可以使用"new"关键字来动态分配内存并调用构造函数。例如:

代码语言:cpp
复制
MyClass* ptr = new MyClass();  // 动态分配内存并调用构造函数

在这种情况下,"new"操作符会分配足够的内存来存储MyClass对象,并调用MyClass的构造函数进行初始化。然后,它返回指向新分配对象的指针。

总结起来,创建指针时不会调用构造函数,因为指针只是存储地址的变量。如果需要创建对象并调用构造函数,可以使用"new"操作符来动态分配内存并初始化对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA & .NET创建对象构造函数调用顺序

constructor chinese init block chinese init block2 chinese constructor 执行顺序为: 基类静态初始化块——当前类静态初始化块——基类初始化块——基类构造函数...——当前类初始化块——当前类构造函数 ⚠️ JAVA中加载类时会调用类的静态代码块 try { Class.forName("models.Chinese"); } catch (ClassNotFoundException...chinese static constructor person static constructor person constructor chinese constructor 执行顺序为: 当前类静态构造函数...——基类静态构造函数——基类构造函数——当前类构造函数 小结 JAVA与.NET创建对象都是先执行静态代码块后执行非静态代码块; JAVA先执行基类中的静态及非静态代码块; .NET先执行基类中的静态代码块...,先执行当前类中的实例构造函数

1.1K20

【C++】多态 ⑨ ( vptr 指针初始化问题 | 构造函数调用函数 - 没有多态效果 )

, 则 没有 多态效果 ; 一、vptr 指针初始化问题 1、vptr 指针与虚函数表 " 虚函数表 " 由 C++ 编译器 负责 创建 与 维护 , 被 virtual 关键字 修饰的 虚函数 ,..., 在 对象 被 创建 , 由 C++ 编译器 对 对象中的 vptr 指针进行初始化操作 , 对象 创建完成 后 , 也就是 虚函数 整理完毕 , 全部放到 虚函数表 中后 , vptr 指针 才会指向...没有多态效果 构造函数 的 作用就是 创建对象 , 构造函数 最后 一行代码 执行完成 , 才意味着 对象构建完成 , 对象构建完成后 , 才会将 vptr 指针 指向 虚函数表 ; 如果在 构造函数...中 调用函数 , 则 没有 多态效果 ; 在 父类 的 构造函数中 , 调用了 父类的 虚函数 ; 此时 , 如果 创建 子类对象 , 执行 父类构造函数 , 仍然调用 父类 的虚函数 , 子类的虚函数...父类构造函数调用 fun 虚函数 , 只能调用 父类本身的 fun 函数 , 此时 vptr 指针没有指向 虚函数表 , 虚函数表未生效 , 只能调用 父类的 fun 函数本身 ; 父类的 构造函数

27620
  • 【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

    构造函数 ( 常用情况 ) VII . 次构造函数 ( 没有构造函数 ) VIII . 构造函数 代码执行顺序 IX . 调用构造函数 / 次构造函数 创建类实例对象 I ....主构造函数 ---- 1 . 构造函数个数 : Kotlin 类定义需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ; 2 ....调用构造函数 / 次构造函数 创建类实例对象 ---- 1 ....创建实例对象 : Kotlin 中没有 new 关键字 , 使用 类名 ( 构造函数参数列表 ) 方式 , 创建类对象实例 ; 2 ....② 主构造函数没有注解 */ class Student1 (name : String, age : Int){ } fun main() { //调用构造函数 var student

    3.8K10

    dotnet C# 只创建对象不调用构造函数方法

    有时我期望只是创建出对象,但是不要调用对象的构造方法,可以通过使用 FormatterServices 的 GetUninitializedObject 函数来实现只创建对象不调用构造函数方法 这个 FormatterServices.GetUninitializedObject...方法大部分是用在做序列化使用的,然而在很多 IOC 容器,也都使用此方法来创建对象,而通过其他方法拿到构造函数 在 WPF 的 XAML 创建对象,也有用到此方法,详细请看 dotnet 读 WPF...Invoke(foo, null); } catch { } class Foo { } 此方法可以用来处理在构造函数...Foo 对象的 Dispose 方法,将会因为拿不到对象而无法调用 解决此方法的做法就是通过只创建对象而不调用构造的方法,先拿到对象然后再调用构造,如果构造出错,依然还可以调用对象的 Dispose...如果没有使用如上方法,那么在释放函数的异常将会在 GC 回收线程抛出,而让应用程序退出 这就是为什么有很多容器和底层库喜欢使用此方法创建对象的原因 本文代码还请到 github 或 gitee 上阅读代码

    82530

    创建子类对象,父类构造函数调用被子类重写的方法为什么调用的是子类的方法?

    public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...A对象的时候父类会调用子类方法?...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

    6.2K10

    【C++】匿名对象 ③ ( 函数返回值为对象值 匿名对象 的 拷贝构造函数 与 析构函数 调用情况分析 )

    匿名对象 , 没有涉及到 将 匿名对象 赋值给其它变量 , 就会在表达式执行完毕后 , 销毁匿名对象 ; 使用匿名对象初始化变量 : 如果 创建 匿名对象 后 , 还使用 匿名对象 初始化 变量 ,...是 类对象值 类型 , 不是 类对象的 引用 或 指针 类型 , 返回的 返回值 是一个 匿名对象 ; // 函数返回值是 Student 类型的对象 Student fun() { Student...逐条分析 构造函数 / 拷贝构造函数 / 析构函数调用过程 : 调用带参数构造函数 m_age = 12 这是在 fun 函数中 , 调用 有参构造函数 , 创建 普通对象 ; 调用拷贝构造函数 这是在...fun 函数中 , 函数返回对象值 , 创建 要返回的 普通对象副本 , 也就是一个 匿名对象 ; 调用析构函数 : m_age = 12 这是 fun 函数执行完毕 , 在函数作用域中的 普通对象...m_age = 12 这是在 fun 函数中 , 调用 有参构造函数 , 创建 普通对象 ; 调用拷贝构造函数 这是在 fun 函数中 , 函数返回对象值 , 创建 要返回的 普通对象副本 , 也就是一个

    30320

    吊打前端专栏 | 吊打JavaScript之从原型到原型链

    创建构造函数后,其原型对象会取得 constructor属性,至于其他方法,都是从Object继承来的,当调用构造函数创建一个新实例后,该实例的内部包含一个指针,指向构造函数的原型对象。...重点之一,当调用构造函数创建一个新实例后,该实例的内部将包含一个指针,指向构造函数的原型对象,这个指针叫[[Prototype]]。在每个对象上都支持一个属性__proto__。...代码调用过程,调用对象的某个属性,会首先搜索从对象实例本身开始,如果找到了给定名字的属性,则返回该属性的值,如果没有找到。...由上述代码,第一,先创建了一个Person的构造函数,空函数,第二,创建了一个Person的实例,第三,重写了其原型对象,调用friend.sayName()函数发生了错误。...__proto__的指向取决于对象创建的实现方式。 构造函数实例,封装的函数,如果通过new操作符来调用,就是构造函数,如果没有通过new操作符来调用的,就是普通函数

    33320

    CC++学习之路(一)

    ( int num)的构造函数出来         // 创建对象根据传入的参数不同调用不同的构造函数         Complex(double real, double imag)        ...        //    若没有显示的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员,由系统默认创建该复制构造函数会存在风险,具体原因请查询 有关 “浅拷贝” 、“深拷贝”...,也就是5个元素存放的是指向MyClass类型的对象的指针没有初始化的指针为空,不指向任何对象,也不调用构造函数。        ...*c:定义指向类对象的指针,但没有进行实际的内存分配,所以不调用构造函数。          **d:定义指向类对象指针指针,但没有进行实际的内存分配,所以不调用构造函数。         ...*e[2]:定义含有两个指向类对象的指针的数组,但没有进行实际的内存分配,所以不调用构造函数

    80031

    【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

    * 只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...空类中真的什么都没有吗?并不是,任何类在什么都不写,编译器会自动生成以下6个默认成员 函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。...Date d2(2015, 1, 1); // 调用带参的构造函数 // 注意:如果通过无参构造函数创建对象,对象后面不用跟括号,否则就成了函数声明 // 以下代码的函数:...但是这个构造函数对,内置类型不处理,对自定义类型调用它的默认函数 比如说这里我们就没有去显示创建构造函数,但是自动创建了一个默认构造函数,默认构造函数 对自定义类型调用他的构造函数 对内置类型不做处理...,但是在程序结束的时候自动调用 关于编译器自动生成的析构函数是否会完成一些事情呢?

    9000

    漫谈C++:良好的编程习惯与编程要点

    内置类型的值传递与引用传递效率没有多大差别,甚至值传递效率会更高。例如,传递char类型,值传递只需传递一个字节;引用实际上是指针实现,需要四个字节(32位机)的传递开销。...当然,要放回的变量要有一定限制:该变量的在进入函数前,已经被分配了内存。以此条件来考量,很容易决定是否要放回引用。而在函数调用时才创建出来的对象,一定不能返回引用。...不一样的是,static成员函数没有this指针,所以它不能够调用普通的成员变量,只能调用static成员变量。...饿汉式“缺点在于无论有没有代码需要a,a都被创建出来。...调用getInstance才创建出唯一实例。

    47330

    漫谈C++:良好的编程习惯与编程要点

    内置类型的值传递与引用传递效率没有多大差别,甚至值传递效率会更高。例如,传递char类型,值传递只需传递一个字节;引用实际上是指针实现,需要四个字节(32位机)的传递开销。...当然,要返回的变量要有一定限制:该变量的在进入函数前,已经被分配了内存。以此条件来考量,很容易决定是否要返回引用。而在函数调用时才创建出来的对象,一定不能返回引用。...不一样的是,static成员函数没有this指针,所以它不能够调用普通的成员变量,只能调用static成员变量。...饿汉式“缺点在于无论有没有代码需要a,a都被创建出来。...调用getInstance才创建出唯一实例。

    56470

    漫谈 C++:良好的编程习惯与编程要点

    内置类型的值传递与引用传递效率没有多大差别,甚至值传递效率会更高。 例如,传递char类型,值传递只需传递一个字节;引用实际上是指针实现,需要四个字节(32位机)的传递开销。...当然,要放回的变量要有一定限制:该变量的在进入函数前,已经被分配了内存。以此条件来考量,很容易决定是否要放回引用。而在函数调用时才创建出来的对象,一定不能返回引用。...不一样的是,static成员函数没有this指针,所以它不能够调用普通的成员变量,只能调用static成员变量。...饿汉式“缺点在于无论有没有代码需要a,a都被创建出来。...调用getInstance才创建出唯一实例。

    19530

    漫谈 C++:良好的编程习惯与编程要点

    内置类型的值传递与引用传递效率没有多大差别,甚至值传递效率会更高。 例如,传递char类型,值传递只需传递一个字节;引用实际上是指针实现,需要四个字节(32位机)的传递开销。...当然,要放回的变量要有一定限制:该变量的在进入函数前,已经被分配了内存。以此条件来考量,很容易决定是否要放回引用。而在函数调用时才创建出来的对象,一定不能返回引用。...不一样的是,static成员函数没有this指针,所以它不能够调用普通的成员变量,只能调用static成员变量。...饿汉式“缺点在于无论有没有代码需要a,a都被创建出来。...调用getInstance才创建出唯一实例。

    19720

    C++ 编程习惯与编程要点

    内置类型的值传递与引用传递效率没有多大差别,甚至值传递效率会更高。例如,传递char类型,值传递只需传递一个字节;引用实际上是指针实现,需要四个字节(32位机)的传递开销。...当然,要放回的变量要有一定限制:该变量的在进入函数前,已经被分配了内存。以此条件来考量,很容易决定是否要放回引用。而在函数调用时才创建出来的对象,一定不能返回引用。...不一样的是,static成员函数没有this指针,所以它不能够调用普通的成员变量,只能调用static成员变量。...饿汉式“缺点在于无论有没有代码需要a,a都被创建出来。...调用getInstance才创建出唯一实例。

    1.1K30

    《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

    函数的作用在于通过父类的指针或者引用来调用它的时候可以变成调用子类的那个成员函数。而构造函数是在创建对象自己主动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。...在构造一个对象,由于对象还未创建成功,编译器无法知道对象的实际类型 (2)虚函数调用需要虚函数指针vptr,而该指针存放在对象的内存空间中,若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间...智能指针将一个计数器与类指向的对象相关联,引用计数器跟踪共有多少个类对象共享同一指针 每次创建类的新对象,初始化指针并将引用计数置为1 当对象作为另一对象的副本而创建,拷贝构造函数拷贝指针并增加与之相应的引用计数...当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。 F.每个类编译后,是否创建一个类中函数表保存函数指针,以便用来调用函数?...每次创建类的新对象,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至

    2.3K40

    轻松搞定面试中的“虚”

    是否每个类的析构函数都要设置成virtual?是否可以将析构函数设置成内联函数。 这样做是为了当用一个基类的指针删除一个派生类的对象,派生类的析构函数会被调用。...5.是否可以将构造函数声明为virtual? 虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。...(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?) 6.是否可以在析构函数或者构造函数调用函数? 在构造函数不要调用函数。...显然的是:当我们构造一个子类的对象,先调用基类的构造函数构造子类中基类部分,子类还没有构造,还没有初始化,如果在基类的构造调用函数,如果可以的话就是调用一个还没有被初始化的对象,那是很危险的,所以...为实现动态联编,编译器为每个包含虚函数的类创建一个表,称为vtable,在vtable中,编译器放置了特定类的虚函数地址,在每个带有虚函数的类中编译器会秘密地设置一个虚函数指针,称为vptr,指向对象的

    67620

    C++内存分区模型分析与实例以及扩展

    6,构造函数是否可以成为虚函数?析构函数是否可以成为虚函数?...7,构造函数不可能成为虚函数: 1,在构造函数执行结束后,虚函数指针才会被正确的初始化; 1,C++ 里面的多态是通过虚函数表和指向虚函数指针完成的,虚函数指针是由编译器创建的,同时也是由编译器进行初始化...,实现有可能不一样,但是所有的 C++ 编译器都会保证在构造函数执行结束后,虚函数指针肯定会被正确的初始化,在这之前,是没有保证的; 3,所以构造函数不可能成为虚函数创建一个对象的时候,我们需要构造函数来初始化虚函数表的指针...delete p; // 期望调用完子类析构函数调用父类的析构函数;但是如果父类没有申请为析构函数,则只调用父类析构函数;这是因为此时删除的是一个父类的指针,由于并没有将析构函数申请为 virtual...,因此在这样情况下,编译器直接根据指针 p 的类型来决定调用哪一个构造函数,由于指针 p 的类型是父类的类型,所以编译器直接暴力认为调用父类构造函数就可以了;当将父类的虚函数声明为 virtual

    79141

    【C++阅览室】类和对象

    只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户 类的6个默认成员函数 在类中如果没有成员的话被称为——空类 但空类中并不代表什么都没有...接下来让我们看看分别是那6个成员函数~ 构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次...Date d2(2015, 1, 1); // 调用带参的构造函数 // 注意:如果通过无参构造函数创建对象,对象后面不用跟括号,否则就成了函数声明 //...对象生命周期结束,C++编译系统系统自动调用析构函数 拷贝构造函数 接下来是一个重头戏~ 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 在的类类型对象创建新对象由编译器自动调用

    5010

    C++(类和对象)

    只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...信息,未免有点麻烦,那能否在对象创建,就将信息设置进去呢?...构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。...关于编译器自动生成的析构函数是否会完成一些事情呢?下面的程序我们会看到,编译器 生成的默认析构函数,对自定类型成员调用它的析构函数。...如果类中没有申请资源,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请,一定要写,否则会造成资源泄漏,比如Stack类。 以上就是析构函数构造函数

    9110

    【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作

    对于空类,并不是什么都没有,编译器会自动默认生成以下六个默认成员函数 二、构造函数 2.1 构造函数概念 构造函数是特殊的成员函数,其中函数名与类名相同,创建类类型对象由编译器自动调用,以保证每个数据成员都有一个合适的初始值...虽然完成每个对象初始化,但是这些初始化的数值对于我们来说并没有多大意义,是否可以认为编译器默认生成构造函数没有意义呢?同时是否可以认为既然默认生成构造函数,我们什么事情都不用做了呢?...对象生命周期结束,C++编译系统自动调用析构函数 3.2 验证是否会自动调用析构函数 析构函数对于内置与自定义类型的处理方式(调用析构函数中this指针存储对象的地址) 对于内置与自定义类型处理: 内置类型不处理...(没有直接调用Time类析构函数,通过Date类中析构函数间接调用) 小结: 内置类型成员,销毁不需要资源清理,最后系统直接将其内存回收 创建哪个类的对象,则调用该类的析构函数,销毁那个类的对象,则调用该类的析构函数..._capacity; } 关于是否显示写拷贝构造函数 类中没有涉及资源申请,拷贝构造是否写都是可以 类中一旦涉及资源申请,拷贝构造一定要写,否则就是浅拷贝 4.5 拷贝构造函数典型调用场景 使用已存在对象创建新对象

    11200
    领券