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
(。当您确实需要动态分配对象时,请使用智能指针。