(C ++ /的Win32)
考虑以下电话:
Object obj = new Object(a,b);
除了分配Object
实例所需的虚拟内存之外,还有什么其他内容?编译器是否对Object
的构造函数进行了显式调用?
有没有办法在不使用关键字new
的情况下动态初始化c ++对象?
答案 0 :(得分:4)
如果要初始化某个给定内存区域中的对象,请考虑placement 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
!
答案 1 :(得分:1)
您始终可以使用malloc
代替新内容,但不要忘记始终将其与free
相关联,而不是delete
。
另见: What is the difference between new/delete and malloc/free?