gpt4 book ai didi

c++ - 在函数中创建的对象的范围

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:59 27 4
gpt4 key购买 nike

我在一个函数中创建了一个类的对象。创建的对象作为参数传递给另一个类。我希望当我退出创建对象的函数时,必须销毁该对象。

同样对这个对象的任何引用肯定是无效的,但是我发现退出函数后引用的对象仍然有效。试图了解对象的范围。代码片段如下。

class TextWidget
{
public:
TextWidget()
{
cout << "Constructor TextWidget" << endl;
}

TextWidget(int id)
{
_ID = id;
cout << "Constructor TextWidget" << endl;
}

~TextWidget()
{
cout << "Destructor TextWidget" << endl;
}

void printWidgetInstance()
{
cout << this << endl;
}
int _ID;
};

class AnotherWidget
{
public:
AnotherWidget()
{
cout << "Constructor AnotherWidget" << endl;
}

~AnotherWidget()
{
cout << "Destructor AnotherWidget" << endl;
}

TextWidget* getTextWidget()
{
return _textWidget;
}

void setTextWidget(TextWidget* t)
{
_textWidget = t;
}

int getTextID() { return _textWidget->_ID; }

private:
TextWidget* _textWidget;
};


ButtonWidget b;
AnotherWidget a;

void fun()
{
TextWidget t(7);
b.setTextWidget(&t);
a.setTextWidget(&t);
a.getTextWidget()->printWidgetInstance();
b.getTextWidget()->printWidgetInstance();
}

int main()
{
fun();
cout << "TextWidget in AnotherWidget is ";
a.getTextWidget()->printWidgetInstance();
cout << "Text ID in a is " << a.getTextID() << endl;
getchar();
return 0;
}

输出

Constructor AnotherWidget
Constructor TextWidget
Before deleting TextWidget in class ButtonWidget 0x73fdf0
Before deleting TextWidget in class AnotherWidget 0x73fdf0
0x73fdf0
0x73fdf0
Destructor TextWidget
TextWidget in AnotherWidget is 0x73fdf0
Text ID in a is 7

最佳答案

使用自动存储持续时间(不使用 new)声明的变量具有其作用域的生命周期。访问范围外的变量会导致未定义的行为。

关于c++ - 在函数中创建的对象的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081237/

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