C++11 - 检测运算符 new [] 的方法
C++11 - Way to detect the operator new[]
我正在尝试使这样的事情工作:
struct holder {
std::function<void()> destroyer;
template<typename T>
holder(T) = delete;
template<typename T>
holder(std::enable_if< WAS CREATED WITH new > pointer) {
destroyer = [=] { delete pointer; };
};
template<typename T>
holder(std::enable_if< WAS CREATED WITH new[] > array) {
destroyer = [=] { delete[] array; };
};
virtual ~holder() {
destroyer();
};
};
然后,我可以简单地进行return new test;
并return = new test[10];
返回holder
的函数。但我发现它永远不会被视为数组,因为operator new[]
返回一个指针。
有什么方法可以达到预期的结果吗?
谢谢! :)
这是不可能的;是否使用了new
或new[]
不是指针类型信息的一部分。
我知道的唯一方法是通过放置-new:
#include <new>
#include <iostream>
struct A
{
void* operator new(std::size_t n, void* ptr)
{
std::cout << "operator new()n";
return ptr;
}
void* operator new[](std::size_t n, void* ptr)
{
std::cout << "operator new[]n";
return ptr;
}
};
int main()
{
A* ptr;
new (ptr) A();
new (ptr) A[5];
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在任何类类型上使用模板方法中的 new
- 使用泛型成员变量"placement new"结构/类数组的正确方法是什么?
- 为多线程环境包装 c++ new/delete 的安全/好方法
- 让编译器告诉哪些方法不具体,而不是错误'invalid new-expression of abstract class type'
- 如何使用new()在嵌套类中调用方法
- 在混合 C/C++ 程序中协调 malloc 和 new 的"正确"方法是什么?
- 使用 init 方法来避免使用 new 分配对象是这种糟糕的设计
- 在C++代码生成器中模拟 C#"new"(隐藏虚拟方法)
- C++11 - 检测运算符 new [] 的方法
- 一种按'new'实现分配的方法
- 在C++中创建"new instance of object"方法
- c++重载和继承,调用new方法
- C++ 使用 "new" 或其他创建动态数组的方法创建类似静态数组
- 如何在c++中使用get和set方法来初始化一个用new初始化的对象?
- "return new node"内存泄漏,我找不到修复它的方法
- 避免在使用"new"关键字后不断取消引用的标准方法是什么?
- 编写没有new和delete关键字的c++?最佳方法
- 有没有一种方法可以在new创建类时自动调用函数