You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++类中实现指向另一个类实例的指针成员?

C++类指针成员实现错误分析与修正

原代码中的错误点

  • 指针赋值类型不匹配+悬空指针问题:
    Class_B构造函数里的class_A_instance = Class_A(b);是错误的。Class_A(b)会创建一个临时Class_A对象,它的类型是Class_A,无法直接赋值给Class_A*类型的指针;而且临时对象会在构造函数执行完毕后立刻销毁,导致class_A_instance变成悬空指针,后续访问会触发未定义行为。

  • 成员访问语法错误:
    main函数里的class_B_instance::class_A_instance::printNumber();误用了作用域解析符::。class_A_instance是class_B_instance的成员变量,需要用成员访问符.;同时它是指针类型,调用成员函数要使用指针访问符->,正确的访问方式是class_B_instance.class_A_instance->printNumber();。

修正后的代码

#include <iostream>

class Class_A
{
public:
  int number_;

  // 用初始化列表初始化成员,更符合C++规范
  Class_A(int a) : number_(a) {}

  void printNumber()
  {
    std::cout << "The value in Class_A is " << number_ << std::endl;
  }
};

class Class_B
{
public:
    Class_A* class_A_instance;

    // 动态分配Class_A实例,让指针指向有效内存
    Class_B(int b) : class_A_instance(new Class_A(b)) {}

    // 添加析构函数释放内存,避免内存泄漏
    ~Class_B()
    {
        delete class_A_instance;
    }
};

int main()
{
  Class_B class_B_instance(3);
  // 正确的成员访问语法
  class_B_instance.class_A_instance->printNumber();

  return 0;
}

修正说明

  1. 改用初始化列表初始化Class_A的成员变量,比构造函数体内赋值更高效且规范。
  2. Class_B构造函数通过new Class_A(b)动态分配对象,保证指针指向有效的堆内存。
  3. 给Class_B添加析构函数,用delete释放动态分配的Class_A实例,避免内存泄漏。
  4. 修正main函数中的成员访问语法,使用. + ->的组合调用指针成员的函数。

内容的提问来源于stack exchange,提问作者3nondatur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:04:58