Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要一个用于删除标量和指针数组的通用析构函数_C++ - Fatal编程技术网

C++ 需要一个用于删除标量和指针数组的通用析构函数

C++ 需要一个用于删除标量和指针数组的通用析构函数,c++,C++,我有一个类被调用来释放内存,如下所示: template<typename T> class mymemrel { T ptr; public: mymemrel() { ptr = NULL; } mymemrel(T ptrArg) { ptr = ptrArg; } void memoryInit(T ptrArg) { ptr = ptrArg; }

我有一个类被调用来释放内存,如下所示:

template<typename T>
class mymemrel
{
    T ptr;
public:
    mymemrel()
    {
        ptr = NULL;
    }
    mymemrel(T ptrArg)
    {
        ptr = ptrArg;
    }
    void memoryInit(T ptrArg)
    {
        ptr = ptrArg;
    }
    ~mymemrel()
    {
        delete ptr;
    }
};
模板
类mymemrel
{
T-ptr;
公众:
mymemrel()
{
ptr=NULL;
}
mymemrel(T ptrArg)
{
ptr=ptrArg;
}
无效记忆信息(T ptrArg)
{
ptr=ptrArg;
}
~mymemrel()
{
删除ptr;
}
};

在析构函数
~mymemrel()
中,我需要为标量和指针数组释放内存(即,如果标量删除ptr,则删除ptr[]ptr,如果其数组),如何实现这一点?

正如kerrek建议的那样,使用
std::unique\u ptr

#include <memory>
using namespace std;

std::unique_ptr<int> p(new int(1));  //manages a int
std::unique_ptr<int[]> p(new int[10]); //manages entire array of ints
#包括
使用名称空间std;
std::unique_ptr p(新int(1))//管理一个int
std::unique_ptr p(新整数[10])//管理整个整数数组

当您拥有类型为
T*
的东西时,您实际上无法知道它是如何分配的,因此无法以一般方式正确销毁它。这不仅仅是
new
new[]
的问题,对象可以通过malloc、依赖操作系统的分配器、对象池等进行分配

根据您的目标,
std::unique_ptr
可能是最好的解决方案,它只能处理
new/delete
new[]/delete[]
,但在大多数情况下就足够了

另外,std::shared_prt是一个选项,您可以指定如何取消分配对象:

//c++11
std::shared_ptr<int> sp( new int[10], []( int *p ) { delete[] p; } );
/c++11
std::shared_ptr sp(新int[10],](int*p){delete[]p;});

如果您想拥有自己的内存管理系统,请考虑在同一个位置分配和释放对象。查看标准中如何定义

std::unique_ptr
,它解决了完全相同的问题。简单的方法是:不要使用原始指针或数组,不要担心
delete
<代码>标准::向量爱你。不是那么简单的方法:首先尝试以某种方式确定您拥有哪种类型的指针,指向单个对象或数组。谁有这些信息?你能详细说明哪种指针吗?有没有办法确定指针是指向单个对象还是指向数组。没有。你一定是通过其他方式知道的。