Com*_*guy 1 c++ malloc constructor new-operator
是否可以使用malloc?将一些参数传递给另一个类的构造函数中的类的构造函数?我可以这样做new.我需要做同样的事情malloc:(如果它没有意义,考虑我使用自定义分配器而不是malloc)
Class A_Class ... {
public:
B_Class *b;
...
A_Class: ...
{ b = new B_Class (c1, c2, c3);
} // end of constructor
}
Run Code Online (Sandbox Code Playgroud)
现在使用malloc:
Class A_Class ... {
public:
B_Class *b;
...
A_Class: ...
{ b = (B_Class*) malloc (sizeof(*b));
??????????????? }
}
Run Code Online (Sandbox Code Playgroud)
malloc分配原始内存.尝试将构造函数参数传递给它是没有意义的,因为它不会调用任何构造函数.
如果必须使用原始内存,则可以使用" placement new "语法在先前分配的原始内存中构造对象
...
void *raw_b = malloc(sizeof *b);
b = new(raw_b) B_Class(c1, c2, c3); // <- placement new
...
Run Code Online (Sandbox Code Playgroud)
在数字上,值b将是相同的raw_b,即可以在没有额外raw_b指针的情况下获得.但我喜欢这样做,用中间void *指针,以避免丑陋的演员阵容.
当然,在销毁这些物品时要小心.自定义分配需要自定义删除 你不能只是delete你b的一般情况.对称的自定义删除序列将涉及显式析构函数调用,然后是原始内存释放
b->~B_Class(); // <- explicit destructor call
free(b);
Run Code Online (Sandbox Code Playgroud)
PS您可能会考虑使用不同的路径:在您的类中重载operator new/ operator delete而不是在每次需要创建对象时明确拼写自定义分配.