从不同的类传递指向新对象的指针(c++)

Passing a pointer to a new object from a different class (C++)

本文关键字:c++ 对象 指针 新对象      更新时间:2023-10-16

我刚接触c++课程(<1周),所以请原谅任何误解。

为了简单起见,我将尽量概括这一点。我的实际系统有更多的函数和变量,但是我把它们省略了,这样我可以试着把我的观点讲清楚。

我声明了两个类A和B。我在类A中的一个函数是getName()函数,它返回一个字符串。我已经动态地为类A分配了对象,并且我相信程序的规范要求我将指向该对象的指针传递给类B的对象,这样就可以从类B访问getName()函数。我试图在类B中打印名称,通过使用指向类A的指针。以下是我的泛型代码解释。

#include <iostream>
using namespace std;   

class A
{
public:
    A(string name)
    {
        getName();
    }
    string getName()
    {
        return name;
    }
private:
    string name;
};

class B
{
public:
    B(A *objectA)
    {
        print();
    }
    void print()
    {
        cout << objectA->getName();
    }
private:
    A *objectA;
};

int main()
{
    A *objectA = new A("nameGoesHere");
    B *objectB = new B(objectA);
}

这段代码是非常通用的,但它会导致分割错误11,我不明白为什么。有人可以向我解释这一点,或者提供一个更好的方法来传递一个指针到一个类,到另一个类。

需要存储B构造函数接收到的指针。

将B构造函数替换为:

B(A *objectA) : objectA(objectA)
{
    print();
}

为了防止代码出现分段错误,还可以检查指针是否为空。

您可能希望在B构造函数中这样做并抛出异常,但这取决于您的系统需求。

忘记从类b初始化类A指针

修改B类构造函数为:

B(A *objectA_) : objectA(objectA_)
{
    print();
}

"objectA(objectA_)"为初始化列表。它用你作为参数传递给构造函数的指针初始化你的B::*objectA。

有更好的解释

B类的成员变量objectA从未初始化,因此它始终是一个悬空指针。你可以使用成员初始化列表来初始化它:

B(A *p) : objectA(p)
{
    print();
}

A类的因子也有同样的问题:

A(const string& s) : name(s)
{
    getName();
}