首页
学习
活动
专区
工具
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 函数本身 ; 父类的 构造函数

22020

【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.1K10

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

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

79230

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

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

6.1K10

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

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

25320

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

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

30920

CC++学习之路(一)

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

77931

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

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

5200

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

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

55270

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

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

17630

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

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

15720

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

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

45030

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,指向对象的

65720

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

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

76541

硬核 | C++ 基础大全

介绍 C++ 的构造函数 类的对象被创建,编译系统为对象分配内存空间,并自动调用构造函数,由构造函数完成成员的初始化工作。 即构造函数的作用:初始化对象的数据成员。...一般构造函数: 也称重载构造函数,一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同,创建对象根据传入参数不同调用不同的构造函数。...如果没有显示的写拷贝构造函数,则系统会默认创建一个拷贝构造函数,但当类中有指针成员,最好不要使用编译器提供的默认的拷贝构造函数,最好自己定义并且在函数中执行深拷贝。...派生类中重写了这个虚函数,我们期望着根据对象的真实类型不同,而调用各自实现的虚函数,但实际上当我们创建一个派生类对象,首先会创建派生类的基类部分,执行基类的构造函数,此时,派生类的自身部分还没有被初始化...什么情况下会调用拷贝构造函数(三种情况) 类的对象需要拷贝,拷贝构造函数将会被调用,以下的情况都会调用拷贝构造函数: 一个对象以值传递的方式传入函数体,需要拷贝构造函数创建一个临时对象压入到栈空间中。

1.2K10

【C++入门篇】保姆级教程篇【中】

由上面的例子我们可以看得出构造函数的一些特征: 1、函数名与类名相同。 2、对象实例化时编译器自动调用对应的构造函数。 3、构造函数没有返回值。...,这时候你在调用Print函数会发现: 似乎出来的是随机值,其实我们没写构造函数的时候编译器是会默认生成构造函数的,只不过生成的默认构造赋给成员变量是随机值。...我们来具体逐步分析一下: 1、类的析构函数调用一般按照构造函数调用的相反顺序进行调用,但是要注意static对象的存在, 因为static改变了对象的生存作用域,需要等待程序结束才会析构释放对象。...其实: 拷贝构造函数函数名与类名相同,不需要返回值,只有 单个形参,该形参是对本类类型 对象的引用(有const修饰),在用 已存在 的类类型对象 创建新对象由编译器自动调用。...,在首次函数传参的时候,函数结束时会调用一次析构函数,但是问题是这里拷贝的指针和原类的成员指针指向的是同一片空间,所以函数结束时调用析构会销毁这片空间,在原对象生命周期结束又会调用一次析构函数,但是原来已经给指针是放过一次了

5810

【C++初阶路】--- 类和对象(中)

函数体中没有关于不同对象的区分,那当d1调用 InitDate函数,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...class Date{}; 三、构造函数 3.1 概念 对于文章开头处的Date类,可以通过 InitDate()公有方法给对象设置日期,但如果每次创建对象调用该方法设置信息,未免有点麻烦,那能否在对象创建...构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。...); // 调用带参的构造函数 // 注意:如果通过无参构造函数创建对象,对象后面不用跟括号,否则就成了函数声明 // 以下代码的函数:声明了d3函数,该函数无参,返回一个日期类型的对象 //

10310
领券