当前位置: 首页 > 知识库问答 >
问题:

运算符new已具有正文

姬衡
2023-03-14

我正在尝试使用全局参数实现运算符new。如果new With args被重载没有问题,但是我在尝试编译时遇到以下错误

inline void* operator new(size_t, void* p) {
    //...
    return p;
}

C:\bjarne_experise_6.cpp(14):错误C2084:函数“void*operator new(size_t,void*)throw()”已具有正文C:\Program Files\Microsoft visual studio 10.0\vc\include\new(55):请参阅“new”的先前定义

C:\bjarne_experise_6.cpp(40):错误C2264:“运算符新建”:函数定义或声明中出错;未调用函数

我刚刚解决了这个问题,您必须在您之前声明这个#include stdafx.h No,not true。它编译得很好,但仍然没有调用这个函数,而是从新头文件中调用版本。之所以如此,是因为在new Header中已经定义了放置new(带有2个参数)。普通的new(只有1,size_t参数)只在那里声明,所以您仍然可以重载它。因此,如果您想要一个以上参数的特殊new,下面@trion建议的解决方案是合适的。

共有1个答案

景宏富
2023-03-14

C++标准定义了一个放置运算符new,在头文件 中添加一个void*。其实现方式与此类似:

void* operator new(size_t, void* m)
{
    return m;
}

它通常用于在已经分配的内存上实例化对象,例如通过将分配与实例化分离的STL容器。因此,如果根据 包含任何标准头,则已经定义了位置new。

如果您希望创建具有不同语义的运算符new自己的版本,可以使用一个虚拟参数来消除这种情况:

struct my_new_dummy {} dummy;
void* operator new(size_t, my_new_dummy, void* m);

//...

int mem;
int* ptr = new(dummy, &mem) int;
 类似资料:
  • 问题内容: 和之间有什么区别?它们都创建一个类的实例,我不确定它们之间有什么区别。 问题答案: 在操作创建一个是静态已知的(在编译时),并可以调用你想创建对象的任何构造一个类型的新对象。这是创建对象的首选方式- 快速且JVM对它进行了许多积极的优化。 是一个动态构造,用于查找具有特定名称的类。它比使用速度慢,因为无法将对象的类型硬编码到字节码中,并且因为JVM可能必须执行权限检查以确保您有权创建对

  • 问题内容: 据我所知,操作员会执行以下操作:(如果我错了,请纠正我。) 分配内存,然后返回分配的内存的第一个块的引用。(显然,内存是从堆分配的。) 初始化对象(调用构造函数。) 运算符也以类似的方式工作,只是它对数组中的每个元素都执行此操作。 谁能告诉我这两个运算符在C ++和Java中有何不同: 就其生命周期而言。 如果他们无法分配内存怎么办。 问题答案: 在C ++中,… 对于类型的对象分配足

  • 在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。如下所示: 在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。 用 new 和 delete 分配内存更加简单: new 操作符会根据后面的数据类型来推断所需空间的大小。 如果希望分配一组连续的数据,可以使用 new[]

  • 本文向大家介绍详解C++中new运算符和delete运算符的使用,包括了详解C++中new运算符和delete运算符的使用的使用技巧和注意事项,需要的朋友参考一下 C++ 支持使用 new 和 delete 运算符动态分配和释放对象。这些运算符为来自称为“自由存储”的池中的对象分配内存。 new 运算符调用特殊函数 operator new,delete 运算符调用特殊函数 operator de

  • 问题内容: 我今天在阅读Accelerated GWT(Gupta)第151页时 遇到了这段代码。 那些新运营商在那里做什么?我从未见过这样的语法,有人可以解释吗? 有人知道在Java规范中的哪里可以找到它吗? 问题答案: 它们是 内部 (嵌套的非静态)类: 你可以做: 或者简单地: 这样做的原因是引用了外部类的特定实例。让我给你一个更详细的例子: 并运行: 输出: 注意: 嵌套类也可以。如果是这

  • 主要内容:RxJava 工具运算符 介绍,RxJava 工具运算符 示例RxJava 工具运算符 介绍 以下是通常对 Observable 工具运算符。 运算符 描述 Delay 注册操作以处理 Observable 生命周期事件。 Materialize/Dematerialize 表示发出的项目和发送的通知。 ObserveOn 指定要观察的调度程序。 Serialize 强制 Observable 进行序列化调用。 Subscribe 操作来自 Observab