(C++/Win32)
考虑以下调用:
Object obj = new Object(a,b);
除了为 an 的实例分配所需的虚拟内存之外Object
,还有什么在幕后发生的?编译器是否对 的构造函数进行了显式调用Object
?
有什么方法可以在不使用关键字的情况下动态初始化 c++ 对象new
?
(C++/Win32)
考虑以下调用:
Object obj = new Object(a,b);
除了为 an 的实例分配所需的虚拟内存之外Object
,还有什么在幕后发生的?编译器是否对 的构造函数进行了显式调用Object
?
有什么方法可以在不使用关键字的情况下动态初始化 c++ 对象new
?
如果您想在某个给定的内存区域中初始化一个对象,请考虑放置新的(请参阅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
不兼容的分配器,所以不要混用new
和free
!
你总是可以使用malloc
而不是新的,但不要忘记总是将它与free
而不是delete
。