我应该总是在C++中使用新运算符而不是malloc函数吗


struct A
{
string st;
};
int main()
{
A *a = (A *)malloc(sizeof(A));
a->st = "print";
cout << a->st;
return 0;
}

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

我应该如何分配运行时内存?

malloc本身是完全错误的。malloc分配内存,它不创建对象。

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

";"更好";方法是在没有理由使用它们的情况下,不要使用这两种方法中的任何一种。

int main() {
A a;
a.st = "print";
cout << a.st;
}

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

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

相关内容

  • 没有找到相关文章

最新更新