搬: 含有对象成员指针的类的对象成员指针初始化问题

矩阵秩的几何守护者:左乘列满秩与右乘行满秩的直观解读 本文深入解析矩阵秩的几何意义,重点探讨列满秩与行满秩矩阵在空间变换和信息完整性中的关键作用。通过橡皮泥变形、投影仪等生动比喻,结合机器学习、计算机图形学等实际应用场景,揭示左乘列满秩与右乘行满秩矩阵如何守护维度空间与数据完整性,为线性代数理解提供直观视角。 阅读详情

含有对象成员指针的类的对象成员指针初始化问题 [问题点数:20分,结帖人papaweilun]

https://bbs.youkuaiyun.com/topics/392257006

hereIambabe

Bbs1

结帖率 66.67%


为什么这个类中的两个coordinate的对象指针,可以在Line的构造函数里面初始化,在我看来,不应该在初始化列表中进行初始化吗?事实上两种方法都可以,我想弄明白。。。。。。

0 2017-08-31 23:05:55

回复数 7 只看楼主 引用 举报 楼主

das白

Bbs6

你需要明白的是
为什么要进行初始化?
不初始化可以么?
而不是在哪里初始化
指针一般在使用之前初始化就可以了
在哪里不都一样么

0 2017-08-31 23:18:49

只看TA 引用 举报 #1    得分 0

棉猴

Bbs5

Blank

类的成员变量在类的初始化列表中初始化和在构造函数中赋值是有区别的。如果没有在构造函数的初始值列表中显式地初始化成员,则成员将在构造题函数执行前执行默认初始化。如果在Line类的构造函数内部对m_pCoorA和m_pCoorB进行赋值,实际上对这两个变量先进行了默认初始化,然后再赋值,效率比直接在初始值列表中要低。
对于自定义类的指针初始化的时机,个人觉得在初始值列表和再构造函数内部都可以。

0 2017-09-01 06:16:27

只看TA 引用 举报 #2    得分 0

迷失丶心

Bbs1

引用 2 楼 hou09tian 的回复:

类的成员变量在类的初始化列表中初始化和在构造函数中赋值是有区别的。如果没有在构造函数的初始值列表中显式地初始化成员,则成员将在构造题函数执行前执行默认初始化。如果在Line类的构造函数内部对m_pCoorA和m_pCoorB进行赋值,实际上对这两个变量先进行了默认初始化,然后再赋值,效率比直接在初始值列表中要低。
对于自定义类的指针初始化的时机,个人觉得在初始值列表和再构造函数内部都可以。



此为正解。

构造函数的初始值列表,是真正初始化类成员的地方,如果没有显式地初始化成员,那么编译器会在构造函数执行前生成默认初始化成员的代码。

而构造函数里写m_pCoorA = 某某,调用的是赋值函数。

0 2017-09-01 08:35:06

只看TA 引用 举报 #3    得分 0

hereIambabe

Bbs1

引用 2 楼 hou09tian 的回复:

类的成员变量在类的初始化列表中初始化和在构造函数中赋值是有区别的。如果没有在构造函数的初始值列表中显式地初始化成员,则成员将在构造题函数执行前执行默认初始化。如果在Line类的构造函数内部对m_pCoorA和m_pCoorB进行赋值,实际上对这两个变量先进行了默认初始化,然后再赋值,效率比直接在初始值列表中要低。
对于自定义类的指针初始化的时机,个人觉得在初始值列表和再构造函数内部都可以。


因为我之前学习到了,如果Line这个类里面有两个Coordinate这样子的对象成员,是一定要使用初始化列表的,因为通过调用构造函数会发现两个Coordinate对象成员会在实例化Line这个对象之前先被实例化
例如
Line L1
会发现L1里面的两个Coordinate会先被实例化再到Line被实例化
所以我就觉得指针应该也是这样子。。。。。。

0 2017-09-01 09:14:55

只看TA 引用 举报 #4    得分 0

幻夢之葉

Bbs7

构造函数的初始化列表初始化 和 构造函数的函数体内赋值
都属于类对象的初始化。

但是两者有些许区别,在初始化列表中进行初始化才是真正意义的初始化,也就是成员在定义的时候就进行了初始化。
而在函数体里面进行赋值,在执行函数体内的语句之前,指针值是不确定的,而对其赋值之后才有一个确定值。

就指针(或者内置类型)来说性能方面的差异几乎可以忽略。但是对于自定义类型,这两种方式的性能上差异会比较明显
假设有一个自定义类型的对象 A m_a;
因为如果在函数体内赋值,那么编译器会在初始化(真正意义上的初始化)调用A的默认构造函数先进行一次初始化。
之后再赋值一次(即给定的赋值语句),性能上就有所损失(毕竟多做了一些事情)

另外,假如A没有提供默认构造函数的情况下(这里不考虑C++11新增的{}统一类内初始化的情况)
那么必须在初始化列表进行初始化,这是为什么呢?根据前面我讲述的你自己思考下答案。
 

0 2017-09-01 16:05:22

只看TA 引用 举报 #5    得分 20

paschen

Bbs10 版主

BlankBlankBlankBlank

引用 4 楼 papaweilun 的回复:

Quote: 引用 2 楼 hou09tian 的回复:
类的成员变量在类的初始化列表中初始化和在构造函数中赋值是有区别的。如果没有在构造函数的初始值列表中显式地初始化成员,则成员将在构造题函数执行前执行默认初始化。如果在Line类的构造函数内部对m_pCoorA和m_pCoorB进行赋值,实际上对这两个变量先进行了默认初始化,然后再赋值,效率比直接在初始值列表中要低。对于自定义类的指针初始化的时机,个人觉得在初始值列表和再构造函数内部都可以。
因为我之前学习到了,如果Line这个类里面有两个Coordinate这样子的对象成员,是一定要使用初始化列表的,因为通过调用构造函数会发现两个Coordinate对象成员会在实例化Line这个对象之前先被实例化例如Line L1会发现L1里面的两个Coordinate会先被实例化再到Line被实例化所以我就觉得指针应该也是这样子。。。。。。



首先,你这里只不过是指针,而不是对象

其次不明白你说的意思

0 2017-09-01 21:45:45

只看TA 引用 举报 #6    得分 0

码无痕

Bbs1

类指针而已,在哪初始化不一样?另外,基类和类成员要在初始化列表去初始化,否则在进入构造函数之前会先调用他们的默认构造函数初始化这些类,而指针不存在这种问题

C++类中成员有指针时的注意事项 关于类中有new初始化的指针成员.可能出现的问题分享的内容默认拷贝(复制)构造函数、赋值运算符,以及显示拷贝构造函数、赋值运算符int* p = new int[0]algrithm库中的sort函数拷贝(复制)构造函数、赋值运算符类对象的成员经常需要动态分配内存。例如int* path.用于保存遍历的节点,申请不同的字节长度满足规模大小不同的需求。如同默认构造函数,当没有定义拷贝(复制)构造函数... 阅读详情

相关推荐

C++类中指针成员的管理(值型类、智能指针)

在使用C++类的时候免不了会遇到类中需要指针成员的时候,但类成员里面一出现指针就很容易一不小心碰上各种各样的麻烦,尤其需要注意的是类对象的初始化和赋值,下面总结了一些常见解决办法。先来看看这样一个类:#include <iostream> #ifndef DEMO_H_ #define DEMO_H_using std::cout; using std::endl; class Demo {

ccyanxyz的博客 3364

C++类中成员变量的初始化的两种方式

​​​​​​C++类中成员变量的初始化有两种方式: 构造函数初始化列表 构造函数体内赋值 下面看看两种方式有何不同。 成员变量初始化的顺序是按照在那种定义的顺序。 1、内部数据类型(char,int……指针等) class Animal { public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) {

顺其自然~专栏 5055

研:类内指针初始化问题

菜,,,容我看看是什么情况 对data_ 进行初始化会core dump, 对,是delete data_导致的,干啥呢,,你没有new data_ 为什么要delete? new delete 配套。 搬: 含有对象成员指针的类的对象成员指针初始化问题 貌似,构造函数里初始化是多余的。不写反正正常,没出问题。 mgj 完全绕蒙了。 到底是判空了才能用指...

hunter 509

c++ 关于类成员,的:类、引用、指针初始化的要求

1.概要 关于成员类,的:类、引用、指针初始化的要求 基本原则:除了指针,其他了类成员必须在构造函数前初始化,最迟是在初始化列表。无参构造函数的类成员,应该是系统默认创建的,可以理想为在构造函数列表中隐形调用的初始化(但一定不是在声明的时候初始化的,我起初也是那么理解的,如果那样的话,有参的构造函数应该也是可以在声明是初始化的,有参的不行,所以无参的也不行,无参虽然没有在初始化列表中体现,并不代码在声明的时候初始化了,声明就是声明,没有初始化。)。 2.实验代码 #include <iost

xie__jin__cheng的博客 1097

C++面向对象——构造函数的初始化列表、类的各种成员方法及区别、指向类成员的指针

构造函数的初始化列表 这里定义一个商品类(CGoods),没有占有外部的资源。此时编译器为这个类产生的默认析构函数就可以了。编译器也可以为这个类产生的默认构造函数(不带参数的构造, 空函数:什么也不做)。但是现在我们提供了一个带3个参数的构造函数,编译器为这个类就不产生的默认构造函数了。类的成员方法一编译以后,会给所有的成员方法 参数 都加上一个this 指针 来接收调用这个方法的对象的地址。但是...

Lv 781

C++初阶——类和对象(六)初始化列表、static成员、友元、内部类

C++初阶——类和对象(六)初始化列表、static成员、友元、内部类

Maple_land的博客 1201

类组合 类指针和类对象的初始化

类的组合 构造函数的用法 在一个类中内嵌另一个类的对象作为数据成员,称为类的组合。该内嵌对象称为对象成员,或者子对象。如三角形类Triangle类的内嵌Node类作为数据成员; class Triangle { private: Node *nodei;  //对象成员 Node *nodej; Node *nodem; public: ... }; 在使用过程中,需要着重注意的是对象成员的初始化!如Triangle的构造函数该如何定义? 如果一个类具...

人面桃花 2573

C++类和对象的细节原理:this指针、构造函数和析构函数、深浅拷贝、运算符重载、初始化列表、类的各种成员和方法

但是在C++中,当你调用一个成员函数时,编译器会自动传递调用该函数的对象的地址作为函数的隐含参数(即 this 指针),因此你无需手动传递对象的地址。类:实体的抽象类型,比如一个人的类,就是先把人的属性、行为等抽象出来,虚虚地放在代码段上,仅仅是一个模板,类型是不占空间的。实体的属性的抽象对应类的成员变量,实体的行为对应类的成员方法。类的成员方法一经编译,所有的方法参数,都会加一个this指针,接收调用该方法的对象的地址。成员对象:B类变量是A类的成员变量之一,那么可以叫这个B类变量为A类的成员对象。

weixin_73240939的博客 1134

C++类中指针初始化注意问题

C++类中指针初始化注意问题 首先了解一下编译器自动生成的赋值函数和operator =函数, 如果你成员变量没有指针那么没什么问题,自带的copy函数会逐bits 的copy,但是如果你类中定义了指针那么问题大了,他会很傻傻的把参数的指针的地址赋值给你的指针,那么你现在类的指针和传入的类的指针指向同一片内存空间,如果那个类释放掉了,那么你的指针指向的就是一片空的内存空间,那么显而易见会出现未...

qq_39352549的博客 6485

从零部署思澈科技SiFli-Solution:避坑指南与实战排错

本文详细介绍了从零部署思澈科技SiFli-Solution开发环境的完整流程与实战排错指南。重点解析了Keil uVision5版本选择、Butterfli工具路径配置等关键步骤,并针对Keil路径报错、函数冲突等高频问题提供了具体解决方案,帮助开发者高效避坑,快速搭建稳定的嵌入式开发环境。

devops8pract的博客 530

Cartographer全局重定位优化:无初始位姿约束的2万平工厂秒级定位实践

本文深入解析了Cartographer在2万平工业场景中的全局重定位优化实践,通过分支定界优化、子图动态加载和多传感器融合等关键技术,实现了无初始位姿约束下的秒级重定位。特别针对大场景下的快速重定位需求,优化后的系统在RK3588平台上表现出色,定位耗时从47秒降至1.8秒,成功率提升至91%,为工业自动化提供了高效解决方案。

rose2的博客 969

类和对象【二】this指针,构造函数和成员初始化列表【超详细】

C++编译器给每个非静态的成员函数增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),这个指针就是this指针在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成在创建对象时调用的特殊方法。其主要作用是给对象的成员赋值。在C++中,构造函数通常没有返回类型,并且不能被声明为const。在创建类的对象时,构造函数自动被调用此外,构造函数可以重载,即可以有多个名字相同的构造函数,但参数列表必须不同。

2301_80058734的博客 1752

2023最新版kali安装教程

2023最新版kali安装教程 打开kali官网(https://www.kali.org/),下载kali镜像

qq_46346209的博客 2万+

含有指针成员的结构体使用总结

在C++中经常用到结构体和指针,当定义一个结构体,结构体成员中有指针的时候,需要注意很多。一下分为:结构体初始化、结构体作为函数参数、函数返回值、以及结构体指针的情况进行总结。 一、含有指针成员的结构体初始化 含有指针成员的结构体初始化的时候,必须给指针成员给一个明确的地址。注意:给指针成员初始化的时候,要么给其一个地址,比如是数组数组地址的时候,就可以通过指针来操作数组,也可以一个变量的地址

JoliceYu的技术博客 4万+

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

飞腾UEFI配置GPIO—飞腾FT2000/4 (D2000/8) GPIO引脚配置及使用

讲解了在飞腾UEFI代码中如何添加GPIO配置相关代码,并以GPIO1_B0—B7为例,将这8个引脚配置为GPIO工作模式并默认输出低电平

qq_30135687的博客 5345

C++类和对象(下)——初始化列表、static成员和友元

C++类和对象——初始化列表、static成员和友元一、再谈构造函数1.1 构造函数整体赋值1.2 初始化列表三级目录 关于C++类和对象的学习 C++类和对象(上)——类的基本概念、类的限定符及封装和类成员函数的this指针 C++类和对象(中)——类的6个默认成员函数(构造、析构、拷贝构造、赋值运算符重载) 一、再谈构造函数 1.1 构造函数整体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。例如我们之前创建的Date类 class Date { public: D

8178

K-BERT: Enabling Language Representation with Knowledge Graph 代码复现 直接运行

K-BERT: Enabling Language Representation with Knowledge Graph K-BERT K-BERT 代码复现

1074

类中数组成员变量怎么初始化,数组名与指针的区别

使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。 (std::vector&lt;int&gt;,构造函数接受const std::vector&lt;int&gt; &amp;vec,拷贝用this-&gt;arr= vec 即可) 但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。 今天刷Leetcode想了一个问题:当数组作...

Jeff_的博客 1万+

windows使用jupyter notebook读取文件路径的几种方法和设置默认打开路径

简单分享小虎这段时间以来学到的jupyter notebook操作技巧。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 1万+

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

类和对象——类的成员函数的this指针

c++的类中的this指针。

m0_73693552的博客 1415

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++ 第二阶段:类与对象 - 第四节:this 指针与静态成员

本文介绍了C++中this指针和静态成员的概念与应用。this指针是一个指向当前对象的隐式指针,用于解决命名冲突、实现链式调用、防止自引用等场景,在非静态成员函数中自动传递。静态成员属于类而非对象,包括静态数据成员(需在类外定义)和静态成员函数(不能访问非静态成员),适用于计数器、工厂方法等场景。二者对比显示:this针对实例对象,静态成员属于类级别。常见错误包括this指针误修改和静态成员未初始化。总结指出应合理使用this指针操作对象,根据需要谨慎使用静态成员,并注意访问控制。

弘羽 1242

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[C++] 类中成员变量的初始化总结二

C++类中成员变量的初始化总结一三种成员变量初始化位置对于类的成员对象的初始化成员数组的初始化基本类型的成员数组对象成员数组补充一下动态数组的初始化vector作为成员变量的初始化 C++类中成员变量的初始化总结一 以前写过一篇C++类中成员变量的初始化总结一, 现在发现还得在补充一些 三种成员变量初始化位置 对于C++11来说,类的成员变量有三个位置进行初始化: 声明时初始化 初始化列表初始化( 成员变量初始化的顺序是按照在那种定义的顺序) 以下三种情况下必须使用初始化成员列表 一、需要初.

selfsongs 3924

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++含有指针成员的类对象作为函数返回值

C++含有指针成员的类对象作为函数返回值 C++的函数内部如果声明并初始化了一个类的对象,并且在函数结束的时候要将这个对象返回,则实际的执行机制是首先调用该类的拷贝构造函数生成一个该对象的拷贝,然后返回这个拷贝,然后原始的对象会被析构。我之前一个以为是直接返回函数内部定义的变量,因此在这个过程中拷贝构造函数就显得十分重要,编译器会为我们生成一个默认的拷贝构造函数,但是当对象的类中含有指针成员的时候...

jinxi1978的博客 2376

C++类基础9——类成员指针

成员指针是指可以指向类的非静态成员的指针。一般情况下,指针指向一个对象,但是成员指针指示的是类的成员,而非类的对象。类的静态成员不属于任何对象,因此无须特殊的指向静态成员的指针,指向静态成员的指针与普通指针没有什么区别。成员指针的类型囊括了类的类型以及成员的类型。当初始化一个这样的指针时,我们令其指向类的某个成员,但是不指定该成员所属的对象:直到使用成员指针时,才提供成员所属的对象。为了解释成员指针的原理,我们定义下面这个类: 数据成员指针 和其他指针一样,在声明成员指针时我们也使用*来表示当前声明的

2301_80224556的博客 1588
上一篇: 研:内存映射方式处理大数据(20G) mmap+memcpy
下一篇: 研:类内指针初始化问题
nedwons
博客等级 码龄9年 311粉丝 572原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值