相关疑难解决方法(0)

我应该如何编写符合ISO C++标准的自定义新的和删除操作符?

我应该如何编写符合ISO C++标准的自定义newdelete运算符?

这是在延续重载new和delete在非常照明C++ FAQ,操作符重载,以及其后续,一个为什么要更换默认的new和delete操作?

第1部分:编写符合标准的new运算符

第2节:编写符合标准的delete运算符

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法首先开始,所以你的答案很可能被那些提出想法的人阅读.)
注意:答案是基于Scott Meyers的学习'更有效的C++和ISO C++标准.

c++ operator-overloading c++-faq new-operator delete-operator

62
推荐指数
4
解决办法
1万
查看次数

为什么C++运算符new/delete/variants不应该在头文件中?

有人可以解释这个C++编译错误的本质吗?我正在涉及/学习重载全局运算符new,delete及其变体.我读了一对夫妇 文章 主题,但我无法找到一个似乎专门解决这个问题.

代码

foo.h:

#ifndef foo_h
#define foo_h

void* operator new(size_t);
void* operator new[](size_t);

void operator delete(void*);
void operator delete[](void*);

#endif // foo_h
Run Code Online (Sandbox Code Playgroud)

foo.cpp:

#include <foo.h>
#include <iostream>

void* operator new(size_t size) { return NULL; }
void* operator new[](size_t size) { return NULL; }

void operator delete(void* p) { }
void operator delete[](void* p) { }
Run Code Online (Sandbox Code Playgroud)

编译错误

>g++ -g -std=c++14 -I./ -c foo.cpp -o foo.o
In file included from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/ext/new_allocator.h:33:0,
                 from /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/include/c++/x86_64-pc-cygwin/bits/c++allocator.h:33, …
Run Code Online (Sandbox Code Playgroud)

c++ gcc delete-operator translation-unit

12
推荐指数
1
解决办法
918
查看次数