gpt4 book ai didi

C++构造、解构和指向类对象的机制

转载 作者:行者123 更新时间:2023-11-30 02:45:35 28 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

class A
{
private:
int m_i;
friend int main(int argc, char const *argv[]);
public:
A (int i = 0):m_i(i){};
void display()
{
cout << m_i << endl;
}
int result() {return m_i;}
};

void createA(A *pa)
{
pa = new A(1);
}

A* createA()
{
A a(2);
return &a;
}

void createAonstack()
{
A a(3);
}

int main(int argc, char const *argv[])
{
A a;
A * pa = &a;
pa->display();
createA(pa);
pa->display();

A * a2 = createA();
cout << a2->m_i << endl;
createAonstack();
cout << a2->m_i << endl;
return 0;
}

上面程序的结果是

0
0
2
3

如何解释结果2和3?按照我的理解,函数createA()中创建的对象应该被解构,它返回的指针应该指向NULL,但是为什么a2->m_i 可以是 2。而 3 更令人困惑,因为函数 createAonstack() 似乎与 a2 无关。

最佳答案

你说

From my understanding, the object created in function createA() should be deconstructed, and the pointer it returns should point to NULL, but why a2->m_i can be 2.

这是真的

the object created in function createA() should be deconstructed

这不是真的

and the pointer it returns should point to NULL

createA 返回的指针是非 NULL,即使它是在调用函数中使用的无效指针也是如此。

but why a2->m_i can be 2.

纯属巧合。这确实是未定义的行为。当您取消引用 a2 时,任何事情都可能发生。

关于C++构造、解构和指向类对象的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24331249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com