【问题标题】:Is it possible to overload new operator for allocating something like 2d array in C++?是否可以重载 new 运算符以在 C++ 中分配二维数组之类的东西?
【发布时间】:2020-05-07 11:47:10
【问题描述】:

是否可以在 C++ 中重载全局 new 和全局删除运算符以分配和释放具有给定“高度”和“宽度”的 2d 内存块?

【问题讨论】:

  • 内存不是2d的,但是可以分配一个大小为width*height的块
  • 对不起,我的想法不正确。我可以以某种方式分配大小为 width*height 的块并将其与下标运算符一起用作二维数组吗?

标签: c++ multidimensional-array operator-overloading new-operator delete-operator


【解决方案1】:

是否可以重载 new 运算符以在 C++ 中分配二维数组之类的东西?

是的。

但是我可以得到一些代码示例吗?

例子:

std::unique_ptr<int[][10]> arr {new int[n][10]};

给定“高度”和“宽度”?

仅当内部维度是编译时间常数时。只有外部维度可以是动态的。

动态单维平面数组和多维数组之间的转换很容易。

【讨论】:

  • 感谢您的回答,但我可以得到一些代码示例吗?
  • @某人我写了一个例子。
【解决方案2】:

不幸的是,全局 new 运算符只有一个参数,因此您不能同时提供“高度”和“宽度”。而且,全局 new/delete 运算符不仅会被您编写的代码使用,还会被您使用的库使用,例如 std::string、std::vector。所以,做出这样的改变可能会导致讨厌的问题。

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多