"new"运算符的过载
overloading "new" operator
在定义类中声明的重载new操作符的工作方式时,我遇到了以下困惑....
- 这里,函数的返回类型是'void'必须引入一个返回语句.....否则我的程序崩溃....为什么如此?
-
void *p"是什么意思
void *myclass::operator new(size_t size) { void *p; p=malloc(size); cout<<"IN overloaded new"; if(!p) { bad_alloc ba; throw ba; } return p; }
函数的返回类型不是void,而是void* (void指针)。void指针是一种泛型指针,可以指向任何对象,但不能解引用——在解引用之前,必须将其强制转换为另一种类型。
如果你不返回void *,那么你就没有返回指向你分配的内存的指针,用户代码将失败
void*
是一个无类型指针。它是一个可以指向任何东西的指针。注意,这个函数的返回类型不是void
,而是void*
。它应该返回一个指向已分配内存的指针。
重载new的简单演示
void* operator new(size_t num)
{
return malloc(num);
}
重载new函数的返回类型必须为void*。它应该返回一个指向所分配内存块开始的指针。这里它返回void *而不是void(这意味着不返回任何东西)。
相关文章:
- 重载运算符new[]的行为取决于析构函数
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 为什么 std::vector 使用 std::分配器而不是运算符 new 和 delete?
- 运算符 new 的执行顺序和构造函数的参数
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 重载运算符 new 和运算符 delete 带有三个参数
- 为什么运算符"new"需要指针才能工作?
- 重载运算符 new(),为什么构造函数被调用两次?
- 为什么运算符 new[] 为数组的大小分配内存?
- 在混合 c 和 c++ 代码中使用运算符 new
- 重载运算符 new/new[] 删除/删除[] 全局C++
- 为什么允许重新定义全局运算符 new(size_t)?
- 无法访问使用运算符 new() 分配的内存
- 显式调用"运算符 new"后无法访问对象的函数
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- 崩溃时间(运算符 new(无符号 int)+22)
- 继承类上的运算符new和delete.操作员删除未执行
- 运算符new[]不接收额外的字节
- 如果我在C++中分配一个带有运算符 new[] 的对象数组,但单独释放它们是否仍然构成内存泄漏