【发布时间】:2023-02-08 22:59:38
【问题描述】:
我试图交换一个指针以指向在方法内创建的新类实例的地址,但是一旦返回到 main,引用就会丢失,这是因为作用域吗?有人可以解释一下吗? c/c++有引用计数吗?
#include <iostream>
class MyClass {
public:
int myNum;
std::string myString;
MyClass(int my_num, std::string my_string)
{
myNum = my_num;
myString = my_string;
}
};
void SwapRef(MyClass **p)
{
MyClass b(99, "test");
*p = &b;
}
int main(int argc, char* argv[])
{
MyClass a(1, "main");
MyClass* aPtr = (MyClass*)0;
aPtr = &a;
std::cout << "myNum is: " << aPtr->myNum << " myString is: " << aPtr->myString << "\n";
SwapRef(&aPtr);
std::cout << "myNum is: " << aPtr->myNum << " myString is: " << aPtr->myString << "\n";
#ifdef _WIN32 || _WIN64
system("pause");
#endif
}
输出:
myNum 是:1 myString 是:main
myNum 是:-858993460 myString 是:
【问题讨论】:
-
c不是c++,c++也不是c。并且没有称为 c/c++ 的语言
-
当一个函数结束时,它内部声明的所有非静态变量都被销毁
-
*p = &b;- 一旦函数返回并且b被销毁,这将导致*p成为悬空指针。 -
如果你想要引用计数使用
std::shared_ptr
标签: c++ pointers scope undefined-behavior storage-duration