C++ 结构分配了malloc,为什么?C++;代码分析

C++ 结构分配了malloc,为什么?C++;代码分析,c++,c,list,struct,C++,C,List,Struct,该行: struct Node* newNode = (struct Node*) malloc(sizeof(struct Node)); 为什么实例化的新结构涉及malloc(为结构的大小分配内存块) 另外,struct的重新声明是多余的吗 下面的人不也能完成同样的任务吗 Node* newNode = new Node; 模式代码如下: #include <stdio.h> #include <stdlib.h> struct Node { int

该行:

struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
为什么实例化的新结构涉及malloc(为结构的大小分配内存块)

另外,struct的重新声明是多余的吗

下面的人不也能完成同样的任务吗

Node* newNode = new Node; 
模式代码如下:

#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int data;
    struct Node* next;
};

struct List
{
    struct Node *head;  // pointer to head node of list
};

//creates a new list Node
struct Node* newListNode(int data)
{
    struct Node* newNode =
            (struct Node*) malloc(sizeof(struct Node));
    newNode->dest = dest;
    newNode->next = NULL;
    return newNode;
}  
#包括
#包括
结构体类型
{
int数据;
结构节点*下一步;
};
结构列表
{
struct Node*head;//指向列表头节点的指针
};
//创建一个新的列表节点
结构节点*newListNode(int数据)
{
结构节点*newNode=
(结构节点*)malloc(sizeof(结构节点));
newNode->dest=dest;
newNode->next=NULL;
返回newNode;
}  
你问过

不会
Node*newNode=newNode完成相同的任务

Node* newNode = new Node; 
不,这在一些非常重要的方面是不等价的。如果此函数的接口(约定)的一部分是返回一个指针,该指针可以传递到
free()
,那么使用
new
实现它将违反该约定


<>另外,重复使用了 Stult关键字,说明了为了确保代码正确编译,既可以作为C和A+C++,也可以是< /P>,因为它是用C编写的,C不知道代码>新< /代码>,可能需要“代码>结构>代码>,这不是习惯C++,但它是合法C++。可能代码是由(1)知道C优于C++的人编写的,或者(2)是想在C库中使用此源代码的人,以及C++,或者(3)一些类似的情况。询问编写代码的人,如果你想知道他们为什么这样写。我们不是头脑读取者。这个代码看起来像纯C,如果它是纯C,那么它就不会(或者至少不应该)对Maloc的结果进行强制转换。@ Beoviigt:不管怎样,编译C作为C++是不合适的。语义上的基本差异,如前面提到的标签命名空间,使得编译C作为C++适合在微不足道的情况下充其量。代码> const 文件范围内的标识符在C中具有外部链接,但在C++中没有。代码> sieof(‘a’)< /C>产生不同的结果等。实际上,重复使用Stult关键字建议EFF以确保此代码在C++编译器中正确编译。C编译器自动将void*强制转换为任何指针类型。@oopsecene:这不是C代码。根据这个问题,它出现在C++编译单元中。