Ash*_*iya 5 c++ pointers memory-management
说我有一堂课Foo
class Foo {
}
Run Code Online (Sandbox Code Playgroud)
我做以下任务:
Foo *ptrFoo=new Foo();
Foo &ref=*(ptrFoo); //question 1
Foo afoo=*(ptrFoo); //quesion 2
Run Code Online (Sandbox Code Playgroud)
我的问题:
1)当分配给"&ref"时内存中发生什么?它只是将"ptrFoo"的内存地址分配给"ref"吗?
2)当分配给"afoo"时,会发生什么?它是否调用copy-constructor?这意味着内存是为两个Foo对象分配的?即"afoo"和先前为"ptrFoo"分配的内存?
3)假设我有一个名为"void methodBar(const Foo&instance)"的方法,如果我将"ptrFoo"传递给:
methodBar((*preFoo));
什么是"const"的重要性在这里?
1)当分配给"&ref"时内存中发生什么?它只是将"ptrFoo"的内存地址分配给"ref"吗?
这取决于您的平台,编译器和编译器设置.您的编译器可能只生成解除引用的同义词.因为可能没有重新定义引用,所以编译器确实不需要为变量分配任何内存.
2)当分配给"afoo"时,会发生什么?它是否调用copy-constructor?这意味着内存是为两个Foo对象分配的?即"afoo"和先前为"ptrFoo"分配的内存?
是,将Foo存储在动态存储中的内容(使用复制构造函数)复制到Foo自动存储中的实例.但是这里没有动态分配; 该aFoo实例将获得创建只是简单地好像没有分配.例如,Foo aFoo;.
3)假设我有一个名为"void methodBar(const Foo&instance)"的方法,如果我将"ptrFoo"传递给:methodBar((*preFoo)); 什么是"const"的重要性在这里?
const在该位置意味着当项目通过引用传递时,声明该引用的方法const不允许修改引用引用的实例.