当前位置:  开发笔记 > 编程语言 > 正文

C++:基类中的String参数在派生类解构时解构

如何解决《C++:基类中的String参数在派生类解构时解构》经验,为你挑选了1个好方法。

我有一个名为A的基类,包含一个字符串类型参数.

B类派生自A.

我定义类C有参数A*a,并将其分配给B.

在main函数中,我无法获取基类的字符串值,因为它在b解构时变为空白.

我希望它输出:

"Hello!"
"Hello!"
end 

但输出是:

"Hello!"

end

这是我的代码:

class A {
public:
    string str;
};

class B : public A {
public:
    B(string _str)  {
        str = _str;
    }
};

class C {
public:
    A *a;
public:
    void printOut() {
        B b("Hello!");
        a = &b;
        cout << a->str << endl;
    }
};

int main() {
    C c;
    c.printOut();
    cout << c.a->str << endl;
    cout << "end" << endl;
    return 0;
}

我怎么处理它?



1> Sombrero Chi..:

正确,因为B b("Hello!");超出范围,c.a现在是一个悬空指针,在被取消引用时将导致未定义的行为.如果你希望它比作用域更长,你可以在堆上分配它:

class A {
public:
    string str;
};

class B : public A {
public:
    B(string _str)  {
        str = _str;
    }
};

class C {
public:
    A *a;
public:
    void printOut() {
        B* b = new B("Hello!");
        a = b;
        cout << a->str << endl;
    }
};

int main() {
    C c;
    c.printOut();
    cout << c.a->str << endl;
    cout << "end" << endl;
    delete c.a;
    return 0;
}

虽然因为你必须跟踪自己分配的内存并delete适当调用,考虑重新设计或使用智能指针,这会变得非常快速.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有