小编Mr.*_*r.Y的帖子

如果指针已被删除,指针容器如何才能拥有指针的所有权?

在这段代码中,我尝试创建一个模板类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++ pointers c++11

2
推荐指数
1
解决办法
345
查看次数

如果知道 void* 分配大小,如何将确切的内存大小传递给 free()

据我所知 ; 在 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)

c c++ pointers memory-management

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

标签 统计

c++ ×2

pointers ×2

c ×1

c++11 ×1

memory-management ×1