Nas*_*ail 1 c++ memory pointers dynamic heap-memory
所以,如果我想声明一个字符数组,我可以这样做
char a[2];
char * a ;
char * a = new char[2];
Run Code Online (Sandbox Code Playgroud)
忽略第一个声明,其他两个使用指针。据我所知,第三个声明存储在堆中,并使用删除运算符释放。第二个声明是否也将数组保存在堆中?这是否意味着如果某些内容存储在堆中并且未释放,则可以在文件中的任何位置使用,例如具有文件链接的变量?我在一个函数中尝试了第三个和第二个声明,然后在另一个函数中使用该变量,但它不起作用,为什么?第二个和第三个声明之间还有其他区别吗?
a[2]在堆栈上存储 2 个字符。 a是一个未初始化的指针。您认为堆分配的变量可以在您的进程中共享是正确的,但是,您需要确保传递分配的堆内存的位置 - 例如,您可以通过a从方法或函数返回,或者通过增加例如的范围a到类范围。
delete将释放堆分配。在您的情况下,delete只能在场景 3 中使用,因为在 #1 中,堆栈变量在超出范围时会被清除,而在 #2 中,您尚未分配任何内存。
由于上述情况很容易导致堆分配所有权转移过程中的混乱,因此可以使用智能指针(例如 boost 的shared_ptr)来使事情变得更auto_ptr简单。
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |