0

(C++/Win32)

考虑以下调用:

Object obj = new Object(a,b);

除了为 an 的实例分配所需的虚拟内存之外Object,还有什么在幕后发生的?编译器是否对 的构造函数进行了显式调用Object

有什么方法可以在不使用关键字的情况下动态初始化 c++ 对象new

4

2 回答 2

4

如果您想在某个给定的内存区域中初始化一个对象,请考虑放置新的(请参阅this

顺便说一句,普通Object* n = new Object(123)表达式几乎等同于(参见operator ::new

 void* p = malloc(sizeof(Object));
 if (!p) throw std::bad_alloc; 
 Object* n = new (p) Object(123); // placement new at p, 
                                  // so invokes the constructor

但是实现可以使用一些malloc不兼容的分配器,所以不要混用newfree

于 2013-09-24T15:43:39.457 回答
1

你总是可以使用malloc而不是新的,但不要忘记总是将它与free而不是delete

另请参阅: new/delete 和 malloc/free 有什么区别?

于 2013-09-24T15:43:30.180 回答