When to use a void pointer?

后端 未结 13 2024
北荒
北荒 2020-12-07 17:33

I understand the use of void pointer for malloc implementation.

void* malloc  ( size_t size );

Can anyone suggest other reasons or provide

13条回答
  •  醉话见心
    2020-12-07 18:09

    One good scenario void* use is when you want to implement any generic ADT's, in case you just don't know what datatype it going to keep and deal with. For example, a linked list like the following:

    typedef struct node_t node;
    struct
    {
        void* data;
        node* prev, next;
    } node_t;
    
    typedef struct list_t list;
    typedef void* (func)(void*) cpy_func;
    typedef void (func)(void*) del_func;
    struct
    {
       node* head, tail, curr;
       cpy_func copy;
       del_func delete;
    } list_t;
    
    initializeLinkedList(cpy_func cpy, del_func del);
    //here you keep going defining an API
    

    Here for example you will pass in initialization function pointers to other functions which will be capable of copying your datatype to your list and freeing it afterwards. So by using void* you make your list more generic.

    I think void* remained in C++ only because of backward compatibility, since in C++ you have more safe and sophisticated ways to achieve the same result like templates, functors, etc., and you don't need to use malloc while programming C++.

    Regarding C++, I don't have any specific useful examples.

提交回复
热议问题