這段代碼來自于jvm源代碼中constantPool.cpp
ConstantPool* ConstantPool::allocate(ClassLoaderData* loader_data, int length, TRAPS) {
Array<u1>* tags = MetadataFactory::new_array<u1>(loader_data, length, 0, CHECK_NULL);
int size = ConstantPool::size(length);
return new (loader_data, size, MetaspaceObj::ConstantPoolType, THREAD) ConstantPool(tags);
}
我的困惑是new和ConstantPool中的那一堆是干嘛用的,我還以為是強制型別轉換呢
uj5u.com熱心網友回復:
這個new運算子應該是被多載了uj5u.com熱心網友回復:
這個不是強制型別轉換,是placement new#include <algorithm>
using namespace std;
class A {
int _c;
public:
A(int c):_c(c){}
void* operator new(size_t n,void* ptr,...){
cout << "place new is call" << endl;
return ptr;
}
};
int main()
{
void* p = malloc(sizeof(A));
A* pa = new (p,10)A(10);
return 0;
}
意思是在p的地址上構造一個A
uj5u.com熱心網友回復:
這叫做 placement new 用法,在指定的一塊記憶體上使用new分配記憶體特定大小堆記憶體轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37718.html
標籤:C++ 語言
上一篇:STL的一個問題,求幫助
