在这段代码中,我尝试创建一个模板类P_array,用于存储指向对象的指针,如下所示.只有模板类存储指针并删除它们,如果在使用后没有删除它们.所以我应该NULL检查一下.
虽然这个问题在其他问题中得到了解决.我真的不明白如何检查指针是否为NULL.
在析构~P_array()函数中检查NULL指针无效.
我尝试了类似的东西std::shared_ptr来解释这个想法.
p_array析构函数:
~P_array() {
unsigned int i = 0;
while(i < total)
{
if (t_array[i]) //Not effective
{
std::cout << "deleting " << t_array[i] << "\n" ;
delete (t_array[i]); //Ownership of pointer
}
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
main.cpp:
#include <iostream>
#include <memory>
#include "p_array.h"
class Obj {
public: ~Obj () { std::cout << "Deleting Obj...\n" ;}
};
int main() {
P_array<Obj> ap;
Obj * op[10];
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 据我所知 ; 在 c++ 和 c 中,delete运算符或free()函数可以从指针数据类型知道分配的内存大小,并delete可以自动调用析构函数。
如果分配的指针是使用一种单例静态动态数组注册的,该数组在其机制中(即malloc仅)在重载新指针中不使用 new 运算符。此数组注册void*指针并从重载中获取该指针的大小new operator
前任。
void * operator new (size_t sz) {
void * m = malloc (sz);
Dynamic_Array::get_instance()->add(m,sz) ; //registering pointer
return m ;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使用有关大小的信息来释放我忘记使用该数组的析构函数删除的确切分配的内存。
前任。
Dynamic_Array::~Dynamic_Array() {
int index = 0;
while(index < storage_size) //storage_size: total number of pointers in array
/* storage is void** array which register
allocated pointers as void* and use classic memset and memcpy to …Run Code Online (Sandbox Code Playgroud)