有什么区别
std::string a;
Run Code Online (Sandbox Code Playgroud)
和
std::string* a = new std::string();
Run Code Online (Sandbox Code Playgroud)
如果两个对象都是由方法调用创建的?这两个物体是否对外"可见",它们什么时候会被摧毁?
谢谢.
我假设你在功能范围定义了这些.
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在范围内时都是可见的,而不是隐藏的.