我试着做些这样的事情:
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[]返回一个指针。
有没有办法达到预期的效果?
谢谢!:)
发布于 2013-09-17 00:48:09
这是不可能的;无论是否使用new或new[],都不是指针类型信息的一部分。
发布于 2013-09-17 00:46:02
我所知道的唯一方法是通过安置-新的。
#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];
}https://stackoverflow.com/questions/18838956
复制相似问题