C++ 用于新操作员分配的公共内存
我被问到一个采访问题:我们如何使用新操作符在不同的函数中分配一个类的两个对象,使它们使用相同的内存空间 有人能解释一下这是如何实现的吗?谢谢 编辑:所以主要的问题是如何创建一个类Memory_Alloc,它应该被所有其他类用来为它们的对象分配内存。我考虑过使用手柄。然后他问我上述问题 具有新位置:C++ 用于新操作员分配的公共内存,c++,c++11,C++,C++11,我被问到一个采访问题:我们如何使用新操作符在不同的函数中分配一个类的两个对象,使它们使用相同的内存空间 有人能解释一下这是如何实现的吗?谢谢 编辑:所以主要的问题是如何创建一个类Memory_Alloc,它应该被所有其他类用来为它们的对象分配内存。我考虑过使用手柄。然后他问我上述问题 具有新位置: /* define class Foo */ void fun1(void * p) { ::new (p) Foo; } void fun2(void * p) { ::new (p) Foo;
/* define class Foo */
void fun1(void * p) { ::new (p) Foo; }
void fun2(void * p) { ::new (p) Foo; }
int main()
{
void * p = ::operator new(sizeof(Foo));
fun1(p);
p->~Foo();
fun2(p);
p->~Foo();
::operator delete(p);
}
永远不要编写这样的代码。不可能,因为两个对象总是占用不同的地址,这也是空对象的大小仍然大于零的原因。也就是说,对于一个技巧问题,您可以创建一个对象,再次销毁它,然后在同一位置创建另一个对象
struct AType
{
};
void func(AType*& p)
{
p = new (p) AType;
}
int main()
{
AType *p1 = new AType;
func(p1);
}
现在,还有一个问题:究竟什么是“内存空间”?面试官是指地址空间吗
我们如何使用new操作符在不同的函数中分配一个类的两个对象,使它们使用相同的内存空间
使用placement new
操作符执行此操作
通常,新操作符负责在堆中查找内存块
它足够大,可以处理您请求的内存量
称为placement new,它允许您指定要使用的位置。
您可以使用此功能设置自己的内存管理过程,或处理通过特定地址访问的硬件,或在特定内存位置构造对象
struct AType
{
};
void func(AType*& p)
{
p = new (p) AType;
}
int main()
{
AType *p1 = new AType;
func(p1);
}
另请参见wiki链接这个问题有点模糊,但在我的脑海中,你可以使用:
- placement new--使用new运算符初始化相同的内存地址
- 重载新运算符——重载新运算符以返回相同的地址
- 委托——使用指向实现的指针习惯用法,使两个对象指向同一个实现对象
new
操作符,并使用Memory\u Alloc
返回分配的内存。好吧,我不会编写不向函数传递非可选参数的代码。.-]