C++对象可见性

Ale*_*eld 0 c++ visual-c++

有什么区别

std::string a;
Run Code Online (Sandbox Code Playgroud)

 std::string* a = new std::string();
Run Code Online (Sandbox Code Playgroud)

如果两个对象都是由方法调用创建的?这两个物体是否对外"可见",它们什么时候会被摧毁?

谢谢.

Jos*_*eld 6

我假设你在功能范围定义了这些.

存储持续时间

std::string a;
Run Code Online (Sandbox Code Playgroud)

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

std::string* a = new std::string();
Run Code Online (Sandbox Code Playgroud)

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

使用new-expression 初始化此指针new std::string().此表达式动态分配std::string对象并返回指向它的指针.此对象具有动态存储持续时间,必须手动删除delete a;.这会破坏a指向的对象.

能见度

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