C++ 成功调用不存在对象的方法

问题描述 投票:0回答:1

为什么我可以拨打

printAlternativ
但不能拨打
print
?两者都不应该起作用。

using namespace std;

class MemTest
{
public:
    MemTest(string);
    ~MemTest();
    void print();
    void printAlternative();
    string name;
};

void MemTest::print() {
    cout << "Print: " << name << "\n";
}

void MemTest::printAlternative() {
    cout << "Print Alternative\n";
}

MemTest::MemTest(string n) {
    cout << "Constructor\n";
    name = n;
}

MemTest::~MemTest() {
    cout << "Destructor\n";
}

void call(MemTest *b) {
    MemTest a("TestName");
    a.print();
    b = &a;
}

int main()
{
    MemTest *b = NULL;
    call(b);
    b->print(); // This crashes
    // b->printAlternative(); This works

    return 0;
}
c++ object memory member
1个回答
1
投票

在 call() 对象被破坏后,现在对象 b 没有任何对象的引用,并且您尝试访问对象的“name”数据成员,因为它崩溃了。 可以通过添加cout来验证<<"Test line"; after call(b); line in main()

为什么另一个可以工作,因为成员函数与类相关联,并在我们第一次声明对象时被分配,并且编译器仅在析构函数()中滑动数据成员

© www.soinside.com 2019 - 2024. All rights reserved.