对于C++中的代码,我应该做些什么? < C++ >下面的代码在C?< /P >中应该做什么? struct Node* node = (struct Node*)malloc(sizeof(struct Node));

对于C++中的代码,我应该做些什么? < C++ >下面的代码在C?< /P >中应该做什么? struct Node* node = (struct Node*)malloc(sizeof(struct Node));,c++,c,C++,C,我应该用新的吗? 谢谢使用新的,不需要演员阵容: Node* node = new Node; 完成后,请使用“删除”而不是“释放”来释放内存: delete node; 但是,建议使用共享ptr: #include <memory> std::shared_ptr<Node> node(new Node); 使用shared_ptr,无需显式删除结构实例。当节点超出作用域时,如果它没有被共享,它将被删除,否则当指向它的最后一个共享\u ptr超出作用域时,它将被

我应该用新的吗?
谢谢

使用新的,不需要演员阵容:

Node* node = new Node;
完成后,请使用“删除”而不是“释放”来释放内存:

delete node;
但是,建议使用共享ptr:

#include <memory>

std::shared_ptr<Node> node(new Node);
使用shared_ptr,无需显式删除结构实例。当节点超出作用域时,如果它没有被共享,它将被删除,否则当指向它的最后一个共享\u ptr超出作用域时,它将被删除。

最好使用new,因为malloc不调用构造函数,所以如果使用只分配所需内存的malloc,则不会构造节点

另一方面,new首先分配内存,然后调用更好的构造函数

编辑:

如果使用malloc,可能会遇到以下问题:必须查看

节点*节点=新节点

这在这里应该具有完全相同的效果。

是的,您想使用新的:

您可以在C++0x和TR1中找到共享_ptr。它将为您处理释放,确保您没有内存泄漏。如果使用Boost,则希望包含和使用Booo::SyddypTr.< /P>

,在C++中,几乎总是使用新的而不是MALLC,尤其是在创建非POD对象时。因为new将创建类的相应构造函数,而malloc不会。若并没有为新创建的对象调用构造函数,那个么得到的是一个指向垃圾的指针

考虑以下示例:

class MyClass
{
public:
    vector<int> m_array;
    void insert();
};
void check::insert()
{
    MyClass *root = (MyClass*)malloc(sizeof(MyClass));

                    -- This will crash your program because internal vector object
                  v -- has not been initialized yet
    root->m_array.push_back(0);
}

要补充的是:请记住,必须使用delete而不是free来释放分配给new的内存。如果代码来自C,则可能没有构造函数。@克里斯:如果是C,则也没有new。代码来自C。OP可能还没有发现需要为Node创建构造函数。并非C++中的所有结构都有构造函数。克里斯:我不确定。但据我所知,C++中的所有结构都有构造函数,甚至是POD。POD没有用户定义的构造函数。如果使用C++0x std::shared\u ptr,如果使用boost boost::shared\u ptr。@Don Lun:TR1也有shared\u ptr。and::std::tr1::shared\u ptr。事实上,TR1在许多编译器中都有提供,并且完全受支持,而C++0x现在在大多数编译器中通常被认为是“实验性的”。
class MyClass
{
public:
    vector<int> m_array;
    void insert();
};
void check::insert()
{
    MyClass *root = (MyClass*)malloc(sizeof(MyClass));

                    -- This will crash your program because internal vector object
                  v -- has not been initialized yet
    root->m_array.push_back(0);
}