void * varname和cpp中的对象varname之间的区别

时间:2017-09-21 20:20:44

标签: c++ object

我来自C背景,我理解的是void指针和struct指针之间没有区别,因为它们在某处确实是相同大小的地址。

我错了吗?

如果没有,cpp中的这个东西也一样吗?对象varname和object * varname和void * varname?

之间的区别是什么

1 个答案:

答案 0 :(得分:0)

在C和C ++中,以下代码有效:

Object *objp1 = voidp;

也就是说,从指向对象类型的指针到指向void的指针存在隐式转换

在C中,以下代码也是合法的:

Object *objp1 = voidp;                       // Error: invalid conversion
Object *objp1 = static_cast<Object*>(voidp); // Ok: cast says to do it

也就是说,还有另一种隐式转换。

在C ++中,转换不合法;你必须使用演员:

import gc

def dump_garbage():
    """
    show us what's the garbage about
    """
    # force collection
    print("\nGARBAGE:")
    gc.collect()

    print("\nGARBAGE OBJECTS:")
    for x in gc.garbage:
        s = str(x)
        if len(s) > 80: s = s[:80]
        print(type(x),"\n  ", s)

if __name__=="__main__":
    import gc
    gc.enable()
    gc.set_debug(gc.DEBUG_LEAK)

    # make a leak
    l = []
    l.append(l)
    del l

    # show the dirt ;-)
    dump_garbage()

在这两种语言中,如果将void指针转换为指向其他类型的指针而指针不指向该类型的对象,则行为未定义。