动态分配c ++对象而不使用new运算符

时间:2013-09-24 15:39:31

标签: c++ compiler-construction new-operator

(C ++ /的Win32)

考虑以下电话:

Object obj = new Object(a,b);

除了分配Object实例所需的虚拟内存之外,还有什么其他内容?编译器是否对Object的构造函数进行了显式调用?

有没有办法在不使用关键字new的情况下动态初始化c ++对象?

2 个答案:

答案 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兼容的分配器,所以不要混用newfree

答案 1 :(得分:1)

您始终可以使用malloc代替新内容,但不要忘记始终将其与free相关联,而不是delete

另见: What is the difference between new/delete and malloc/free?