- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们知道,C++标准定义了两种形式的全局分配函数:
void* operator new(size_t);
void* operator new[](size_t);
此外,C++ 标准草案 (18.6.1.2 n3797) 说:
227) It is not the direct responsibility of operator new or operator delete to note the repetition count or element size of the array. Those operations are performed elsewhere in the array new and delete expressions. The array new expression, may, however, increase the size argument to operator new to obtain space to store supplemental information.
让我困惑的是:
如果我们从标准中删除 void* operator new[](size_t);
并只使用 void* operator new(size_t)
会怎么样?定义冗余全局分配函数的基本原理是什么?
最佳答案
我认为 ::operator new[]
可能对相当专业的系统很有用,在这些系统中,“大而少”的数组可能由与“小而多”的对象不同的分配器分配。然而,它目前是一种遗物。
operator new
可以合理地期望在返回的确切地址处构造一个对象,但 operator new[]
不能。分配 block 的第一个字节可能用于大小“cookie”,数组可能被稀疏初始化等。这种区别对于成员 operator new
来说更有意义,它可能专门用于其特定的类。
在任何情况下,::operator new[]
都不是必须的,因为 std::vector
(通过 std::allocator
),这是目前最流行的获取动态数组的方式,忽略它。
在现代 C++ 中,自定义分配器通常比自定义的 operator new
更好。实际上,应该完全避免使用 new
表达式,以支持容器(或智能指针等)类,它们提供更多的异常安全性。
关于c++ - 为什么::operator new[] 是必需的,而::operator new 就足够了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528694/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!