【问题标题】:copying a c-style array to new memory将 c 样式数组复制到新内存
【发布时间】:2021-06-29 14:07:25
【问题描述】:

编写一个自定义向量类(底层结构是一个 c 风格的数组),我无法理解将一个数组的内容复制到另一个新数组(动态分配)然后删除之后的想法旧指针,只需将其重定向到新指针......这不会导致两个指针指向同一个数组吗?这如何被充分破坏?

这是我所指的 sn-p:

...
value_type* newarray = new value_type[new_capacity];
    for (size_t i{0}; i < size; ++i)
      newarray[i] = oldarray[i];
    delete[] oldarray; //makes sense
    oldarray = newarray; //so I've copied the starting address of the array to another address in memory?
    capacity = new_capacity;
 ...

那么 newarray 指针会发生什么?我知道我的旧指针现在指向新分配的内存(并且旧内存被“删除”),但肯定还有另一个指针仍然指向同一个新分配的内存?

【问题讨论】:

  • 这个函数一结束新分配的数组是否会被破坏(函数,如push_back、insert等任何可能需要调整数组大小的函数)?
  • 这个函数一结束,新分配的数组是否会被销毁
  • newarray 是一个局部变量,它在例程结束时消失,噗!它消失了。它指向的内容不受影响。
  • @stark ohhhhhhhhh 是的,谢谢让我的 a 和 b 有点困惑

标签: c++ arrays pointers


【解决方案1】:

变量newarray 是本地创建的指针变量。这只是意味着在堆栈上保留了一个名为“newarray”的位置来存储newarray 指向的地址。

在函数结束时,它将超出范围,其内存将被回收。它指向的对象将不受影响。

你有多少个指针指向同一个对象没有区别,只要它们指向的对象被删除准确一次。

【讨论】:

  • 感谢您的回答,很有道理
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 2020-01-23
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多