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

为什么在使用构造函数后,指针的向量没有保存为类成员?

在使用构造函数后,指针的向量没有保存为类成员的原因可能有以下几点:

  1. 构造函数中没有将指针的向量保存为类成员:构造函数是用来初始化对象的特殊成员函数,它在对象创建时被调用。如果在构造函数中没有将指针的向量保存为类成员,那么在构造函数执行完毕后,指针的向量就会被销毁,无法在类的其他成员函数中访问。
  2. 指针的向量是局部变量:如果指针的向量是在构造函数中定义的局部变量,那么它的作用域仅限于构造函数内部。一旦构造函数执行完毕,局部变量就会被销毁,无法在类的其他成员函数中访问。
  3. 指针的向量没有被正确传递或赋值:如果在构造函数中创建了指针的向量,并且希望将其保存为类成员,需要将其传递给类成员或使用赋值操作符进行赋值。如果没有正确传递或赋值,指针的向量就无法保存为类成员。

为了解决这个问题,可以在类的定义中声明一个指针的向量作为类成员,并在构造函数中将其正确传递或赋值。这样,在类的其他成员函数中就可以访问和操作这个指针的向量了。

以下是一个示例代码:

代码语言:txt
复制
#include <vector>

class MyClass {
private:
    std::vector<int>* ptrVector; // 声明一个指针的向量作为类成员

public:
    MyClass(std::vector<int>* vector) {
        ptrVector = vector; // 将传递的指针的向量赋值给类成员
    }

    void printVector() {
        for (int i : *ptrVector) {
            std::cout << i << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    MyClass myClass(&myVector); // 创建类对象时传递指针的向量

    myClass.printVector(); // 输出:1 2 3 4 5

    return 0;
}

在上述示例中,通过将指针的向量作为构造函数的参数传递给类对象,并在构造函数中将其赋值给类成员,实现了在类的其他成员函数中访问和操作指针的向量的目的。

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

相关·内容

【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

, 这个增加的参数是 对象本身的指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...Student* pThis 在 列表的开始位置 ; 详细代码 , 参考最后的完整代码示例 ; 2、全局函数转为成员函数 - 通过 this 指针隐藏操作数 全局函数转为成员函数 , 需要隐藏一个参数..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数中 , 通过 this 指针访问对象本身的成员 ; 在全局函数中 , 实现两个 Student 类相加 , 接收两个...; } 详细代码 , 参考最后的完整代码示例 ; 二、有参构造函数设置默认参数值 ---- 为 Student 类定义了有参构造函数 , 则其默认的无参构造函数 , 就不会生成 ; // 带参构造函数...; 如下带参数的构造函数 , 并且为其 有参构造函数 的参数 设置一个默认值 , 此时就可以使用 类名 对象名 的方式定义对象变量 ; class Student { public: // 带参构造函数

23820

【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类 , 无法在 类外部调用 父类的 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...子类对象 , 父类指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 父类类型指针 ; 引用 : 父类引用 引用 子类对象 , 将 子类对象 赋值给 父类类型的引用 ; 二...// 通过父类指针调用父类函数 p_parent->funParent(); // 将指向子类对象的指针传给接收父类指针的函数 // 也是可以的 fun_pointer

30920
  • C++知识概要

    在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。...) 派生类自己的构造函数 必须使用成员列表初始化的四种情况 当初始化一个引用成员时 当初始化一个常量成员时 当调用一个基类的构造函数,而它拥有一组参数时 当调用一个成员类的构造函数,而它拥有一组参数时...另外,virtual 函数是在不同类型的对象产生不同的动作,现在对象还没有产生,也就不能使用 virtual 函数来完成你想完成的动作 析构函数为什么要虚函数 C++中基类采用 virtual 虚析构函数是为了防止内存泄漏...指针没有初始化,释放后没有置空,越界 悬空指针:一个指针的指向对象已被删除,那么就成了悬空指针。...为什么拷贝构造函数必须传引用不能传值 拷贝构造函数的作用就是用来复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实例。

    1.1K20

    【C++】C++入门 — 类和对象初步介绍

    1 类的作用域 类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。...有这样的一个问题: Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用默认构造函数时,该函数是如何知道应该设置today对象,而不是设置yesterday...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...this指针存在于哪里? 在C++中,this指针是一个隐含的、非静态成员函数内部可用的特殊指针,它指向当前正在调用该成员函数的对象实例。...然而,在某些特定情况下,this指针确实可能为空,特别是在不正确的使用情况下,比如: 当对象尚未完全构造完成时,即在构造函数初始化列表结束前或进入构造函数主体之前访问this,这时的行为是未定义的,编译器不会阻止这样的行为

    12210

    C++相关基础知识总结笔记

    输出:预处理后的代码保存为.i文件。 编译(Compilation) 目的:编译阶段将预处理后的代码进行词法分析、语法分析、语义分析和优化,生成汇编代码。 输出:汇编代码保存为.s文件。...静态成员函数相关 静态成员函数的特点 没有this指针:静态成员函数不隐式地接收this指针,因此它不能直接访问类的非静态成员变量或调用非静态成员函数。...如果基类没有默认构造函数,或者需要传递参数给基类构造函数,可以在派生类的构造函数初始化列表中显式调用基类的构造函数。 构造函数的规则 如果类中定义了任何构造函数,编译器就不会自动生成默认构造函数。...如果类中定义了任何构造函数,但没有定义拷贝构造函数或移动构造函数,编译器会自动生成默认的拷贝构造函数和移动构造函数。 构造函数的应用场景 初始化成员变量:确保对象在使用前处于有效状态。...多次释放同一块内存:释放内存后再次尝试释放同一块内存。 循环引用:在使用智能指针时,如果没有正确处理循环引用,可能会导致内存无法被正确释放。

    21330

    C++学习知识点

    使用const修饰的引用表示常引用,即引用的变量是常变量,这样一来,是防止在函数中对常引用的修改,多用于修饰类的常对象。如果将值调用的形参声明为常量,则没有多大的使用价值。...为什么基类类型指针在被子类对象赋值后不能访问子类的成员函数呢?...如果只是简简单单的进行浅拷贝,也就是值拷贝,会出现一个对象被析构后,另一个对象的成员变量,比如指针会指向被释放的内存空间,这就是指针悬挂问题。此时就需要手动书写拷贝构造函数,完成深拷贝。...对于类定义对象什么时候用new,什么时候不用new的认识 (1) 构造函数只适用于类成员的初始化,与分配类对象的空间无关; (2) 隐式执行默认构造函数,初始化申明在栈上的类对象,直接申明,不要使用...(3) 显式执行重载的构造函数,初始化申明在栈上的类对象,直接申明,不要使用new,如GPR gpr= GPR(6),其中类GPR构造函数是GPR(int i){}; (4) new申明的是类指针,

    1.7K20

    与C++类和对象的宿命(下)

    对于没有显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构造会编译错误。...建议声明顺序和初始化列表顺序保持⼀致 构造函数太复杂了,我们在这里进行深化一下 为什么引⽤成员变量、const成员变量、没有默认构造的类类型成员变量这三种必须进行列表初始化操作呢?...以后得构造函数初始化成员尽量使用初始化列表 优先就是显示初始化 没有缺省值就是调用对应类型的默认构造函数 • 初始化列表中按照成员变量在类中声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆关。...•⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。 • 静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。...所以我们是需要通过成员函数将这个静态成员变量进行返回的操作的 如果这个静态成员变量是公有的话那么我们在类外面通过类域就能进行调用了 我们有静态成员变量也有静态成员函数的,静态成员函数是没有this指针的

    20410

    CC++面试常问题集(2)

    一,构造函数  构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。...因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。 二,析构函数  析构函数也不会被子类继承,只是在子类的析构函数中会调用父类的析构函数。...在C++,有五种函数不能被声明成虚函数,分别是:非成员函数、构造函数、静态成员函数、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。 1....(2)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。...返回类型为void*,必须强制类型转换对应类型指针,new则直接返回对应类型指针; 8、对于malloc分配内存后,若在使用过程中内存分配不够或太多,这时可以使用realloc函数对其进行扩充或缩小,但是

    1.2K10

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

    67、类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一些? 1) 赋值初始化,通过在函数体内进行赋值初始化;列表初始化,在冒号后使用初始化列表进行初始化。...也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行 this指针的使用 一种情况就是,在类的非静态成员函数中返回类对象本身的时候...91、几个this指针的易混问题 A. this指针是什么时候创建的? this在成员函数的开始执行前构造,在成员的执行结束后清除。...this指针在调用之前生成,至于“类实例后函数”,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。...当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。 F.每个类编译后,是否创建一个类中函数表保存函数指针,以便用来调用函数?

    2.4K40

    C++之类和对象

    (在C语言中是习惯先定义变量再使用),但是一般我们见到的C++程序都是将成员函数写在成员变量的前面,这是为什么呢?...但为什么大家更喜欢使用class来定义类呢?因为struct在定义类的时候默认权限是public,而class在定义类的时候默认权限是private。一般来说,并不喜欢在类外可以访问到成员变量。...而this指针作为参数传递时是允许为空的,在成员函数里也没有对this指针进行解引用。 代码2运行崩溃,因为在成员函数中对this指针进行解引用了,而this指针是一个空指针。...,同样受类域和访问限定符的约束; 静态成员函数最特别的地方在于它没有那个隐藏的this指针,所以我们在调用的时候不用传对象的地址,因此可以直接使用域限定符直接调用,而不需要创建对象,就能直接访问到类里面的静态成员变量...因为我们在类中定义的这个函数,所以第一个参数默认为隐藏的this指针,也就是左参数必须是类对象,因此这个运算符应该要这样使用: 可以看到这样使用就没有任何问题了,但是这样的可读性不高,重载这个运算符又显得没有意义了

    1.2K00

    探索CC++的奥秘之C++中的继承

    派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显示调用。...编译器规定,子类不能显示的在初始化列表初始化父类成员变量,在函数体内可以,并且这个时候父类中必须要有构造函数。 没有定义父类对象为什么还会调用父类构造函数呢?...如果父类中没有默认构造函数,在子类中要这样定义: 当然有默认构造的话也可以这样在初始化列表初始化,只是说如果父类中没有默认构造,用Student 定义的对象程序运行的时候会报错。...子类析构函数完成后,自动调用父类析构,这样就保证了先子父,显示调用父类析构是没办法保证先子后父的: 为什么要先子后父?...如果先父后子肯定坑, 因为子类中可能还会访问父类的成员,假设先析构在去访问肯定是不行的。 父类析构: 子类析构:  4. 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。

    12310

    Java面试基本问题

    而且,它没有返回类型,并且在创建对象时会自动调用它。 有两种类型的构造函数: 默认构造函数:在Java中,默认构造函数是不接受任何输入的构造函数。...Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。 Q8。Java中的数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么在Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序的复杂性。由于Java以其简单的代码而闻名,因此添加指针的概念将是矛盾的。...在Java中,访问修饰符是特殊的关键字,用于限制对另一个类中的类,构造函数,数据成员和方法的访问。...最终变量可以在不同的上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用类构造函数可以将值分配给它。

    1.1K20

    【1】进大厂必须掌握的面试题-Java面试-基础

    而且,它没有返回类型,并且在创建对象时会自动调用它。 有两种类型的构造函数: 默认构造函数:在Java中,默认构造函数是不接受任何输入的构造函数。...Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。 Q8。Java中的数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么在Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序的复杂性。由于Java以其简单的代码而闻名,因此添加指针的概念将是矛盾的。...在Java中,访问修饰符是特殊的关键字,用于限制对另一个类中的类,构造函数,数据成员和方法的访问。...最终变量可以在不同的上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用类构造函数可以将值分配给它。

    1.7K00

    c++类和继承面试点25连问

    运行时多态简单来讲就是:使用基类指针或者引用指向一个派生类对象,在非虚继承的情况下,派生类直接继承基类的虚表指针,然后使用派生类的虚函数去覆盖基类的虚函数,这样派生类对象通过虚表指针访问到的虚函数就是派生类的虚函数了...由成员变量和是否有虚函数决定,如果类中有虚函数,那就在所有成员变量的基础上加上一个虚函数指针的大小,在64位机器中,虚函数指针为8个字节,注意计算类大小的时候要考虑字节对齐的问题。...,结合我们知道的,如果使用了空指针,就会发生段错误,那这里肯定也会发生段错误,但实际上编译执行后并没有产生错误,print函数被正确执行了,这就很尴尬了,这是为什么呢?...这个,并且此时因为print函数没有使用类CPeople的任何成员,它当然可以正常的执行。...,因为成员函数是公用的,但是成员变量却是每个对象独有的,没有为people分配空间,就是没给成员变量分配空间,且此时people为空指针,那给成员函数传入的隐形this指针也是空指针,它怎么可能访问到某个成员变量呢

    99410

    CC++常见面试知识点总结附面试真题—-20220326更新

    用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元即为内存泄露。 1). 使用的时候要记得指针的长度. 2). malloc的时候得确定在那里free. 3)....在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?...没有任何构造函数时,编译器会自动生成默认构造函数,也就是无参构造函数;当类没有拷贝构造函数时,会生成默认拷贝构造函数。 2)....是否需要定义拷贝构造函数的原则是,类是否有成员调用了系统资源,如果定义拷贝构造函数,一定是定义深拷贝,否则没有意义。...拷贝构造函数的目的是用其它对象的数据来初始化当前对象,并没有期望更改其它对象的数据,添加 const 限制后,这个含义更加明确了。

    1.6K10

    C++类的this指针,静态成员,友元函数友元类

    ---- 1. this指针 在上篇讲C++中类,对象,封装,继承(派生),多态的时候,this指针出现在成员函数中,并使用->成员提取符操作成员变量。...在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址,this 指针是所有成员函数的隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针在成员函数的开始执行前构造的...,在成员的执行结束后清除。...所以this指针不能在静态函数中使用,静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用...而静态成员在无需构造对象情况下,可以使用类名访问。

    1.5K10

    C++ 核心编程

    a为什么func(a); 为什么调用的是没有const的方法。...构造函数语法:类名(){} 构造函数,没有返回值也不写void 函数名称与类名相同 构造函数可以有参数,因此可以发生重载 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数语法:...this指针不需要定义,直接使用即可 this指针的用途: 当形参和成员变量同名时,可用this指针来区分 在类的非静态成员函数中返回对象本身,可使用return *this。...C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性。...const修饰成员函数 常函数: 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 void showPerson

    2.1K20

    Java面试基本问题

    而且,它没有返回类型,并且在创建对象时会自动调用它。 有两种类型的构造函数: 默认构造函数:在Java中,默认构造函数是不接受任何输入的构造函数。...Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。 Q8。Java中的数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么在Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序的复杂性。由于Java以其简单的代码而闻名,因此添加指针的概念将是矛盾的。...在Java中,访问修饰符是特殊的关键字,用于限制对另一个类中的类,构造函数,数据成员和方法的访问。...最终变量可以在不同的上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用类构造函数可以将值分配给它。

    1.1K50

    C++(类和对象)

    类中既有成员变量也有成员函数,那我们需要计算成员函数的大小吗? 用编译器运行一下 可以看到编译器在计算时并没有计算成员函数的大小,只计算了成员变量的大小。...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递 构造函数和析构函数 构造函数和析构函数属于六个默认成员函数的其中一个。...,代码可以通过编译,因为编译器生成了一个无参的默认构造函 数 // 将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再 生成 // 无参构造函数,放开后报错...如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。 以上就是析构函数和构造函数

    9310
    领券