gpt4 book ai didi

C++ 对象可见性

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:10 25 4
gpt4 key购买 nike

有什么区别

std::string a;

 std::string* a = new std::string();

如果两个对象都是通过方法调用创建的?这两个对象都对外部“可见”吗?它们何时会被销毁或永远不会被销毁?

谢谢。

最佳答案

我假设您在函数范围内定义它们。

存储期限

std::string a;

这定义了一个名为 a 的变量,类型为 std::string。它创建一个具有自动存储持续时间的 std::string 类型的对象,这意味着当变量超出范围时它将被销毁。

std::string* a = new std::string();

这定义了一个名为 a 的变量,类型为 std::string*(指向 std::string 的指针)。它创建一个具有自动存储持续时间的 std::string* 类型的对象,这意味着当变量超出范围时它将被销毁。也就是说,指针 将在作用域结束时被销毁。

此指针使用新表达式 new std::string() 初始化。此表达式动态分配一个 std::string 对象并返回指向它的指针。此对象具有动态存储期限,必须使用 delete a; 手动删除。这会破坏 a 指向的对象。

可见度

可见性是名称的属性,而不是对象的属性。在这两种情况下,声明的名称 a 在范围内且未隐藏时是可见的。

关于C++ 对象可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302047/

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