我应该在 C++ 中始终使用 new 运算符而不是 malloc 函数吗?

-2 c++ malloc new-operator

struct A
{
 string st;
};

int main()
{
 A *a = (A *)malloc(sizeof(A));
 a->st = "print";

 cout << a->st;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用这种方式并成功编译时,但之后在运行时出现异常。所以,我发现一件事是A *a = new A;代替A *a = (A *)malloc(sizeof(A));。做这种事情哪种方法更好而且不会出错?

运行时内存分配应该怎么做?

for*_*818 5

malloc独自一人是完全错误的。malloc分配内存,但不创建对象。

new通过调用构造函数分配内存并创建对象。

“更好”的方法是当没有理由使用两者中的任何一个时都不使用它们。

int main() {
   A a;
   a.st = "print";
   cout << a.st;
}
Run Code Online (Sandbox Code Playgroud)

A只有一个类型为 的成员std::stringstd::string已经在管理动态分配的字符串。没有理由动态分配 a std::string,也没有理由使用new它来创建A.

如果您仍然需要动态分配对象,则不应使用原始拥有指针。您的代码泄漏了内存,并且没有简单的修复方法(抛出异常时可能永远不会到达delete末尾的a )。main当您确实需要动态分配对象时,请使用智能指针。