(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。