C++中对指针初始化为NULL或nullptr会不会占用内存?

比如

QSqlQuery query;
LANObject* lan = LanObject::DetectLANEnvironment();

if (nullptr != lan) {
    MessageItem* item = nullptr;

    if (lan->getID() == 0) {
        // ...
        if (!query.exec(SqlQueryLANMessageData)) {
            return false;
        }
        lan->setID(query.value(0).toUInt());
        // ...
    }

    item = new MessageItem;
    item->setLANObject(lan);
    list->appendMessage(item);
    return item;
}

比如在上面的代码中,应为中间可能会返回,我不想每次返回前手动delete,所以使用MessageItem* item = nullptr;先设置为空,最后才new一个实例。请问这样即使是在中间返回了也不会造成内存泄漏吧?但之前好像看过空指针也会占用一个字节。

中间返回情况下,MessageItem还没有new出来,所以并没有内存泄漏。而对于item,它是局部变量,占用内存4字节(32位编译器),在中间return之后会自动释放内存,不存在什么内存泄漏。

空指针并没用分配堆内存,所说的占用是像定义变量一样保存在栈内存中所需存储空间,比如32位系统中指针本身占用4个字节用以保存地址值(NULL),就像char型变量其本身需要1字节保存对应的ASCII码一样。--来自学生党的理解,如有不当还请见谅。

null/nullptr 和 内存的理解。null/nullptr是内存独立出来的一片空间,这里的地址被称作安全地址(防止出现野指针)。变量申请的内存在堆/栈/静态存储区等等,又是另一片空间。你把指针赋值null/nullptr只能说明你把它指向了安全地址,你原来申请的内存该释放还是得释放