C++ C++;内存分配器和多态类型
内存分配器应该与多态类型一起使用吗? 例如,下面的代码正确吗C++ C++;内存分配器和多态类型,c++,stl,standards,allocator,C++,Stl,Standards,Allocator,内存分配器应该与多态类型一起使用吗? 例如,下面的代码正确吗 class A { ... }; class B { ... }; class C : public A, public B { ... }; std::allocator<C> alloc_c; auto p_c = alloc_c.allocate(1); // CASE A: pointer to A and to C point to the same memory address std::allocator
class A { ... };
class B { ... };
class C : public A, public B { ... };
std::allocator<C> alloc_c;
auto p_c = alloc_c.allocate(1);
// CASE A: pointer to A and to C point to the same memory address
std::allocator<A> alloc_a(alloc_c);
alloc_a.deallocate((A*)p_c, 1);
// CASE B: pointer to B and to C point to the different memory addresses
std::allocator<B> alloc_b(alloc_c);
alloc_b.deallocate((B*)p_c, 1);
A类{…};
B类{…};
C类:公共A、公共B{…};
std::分配器alloc_c;
自动分配=分配分配(1);
//案例A:指向A和指向C的指针指向相同的内存地址
分配器alloc_a(alloc_c);
分配-解除分配((a*)分配,1);
//案例B:指向B和C的指针指向不同的内存地址
分配器alloc_b(alloc_c);
alloc_b.deallocate((b*)p_c,1);
当然,这是案例A或案例B,而不是两者。17.6.3.5中的表28以这种方式定义了
解除分配
:
a.deallocate(p,n)
:在调用之前,应销毁p
所指区域中的所有n
T
对象<代码>n应与传递给分配
的值匹配,以获得该内存。不抛出异常。[注:p
不得为单数。-结束注]
根据上面的表27,p
是“类型XX::pointer
的值,通过调用a1.allocate
获得,其中a1==a
”(XX
是“类型分配器”
”,而X
是“类型T
的分配器类”)。此外,a
和a1
是“类型X&
的值”
换句话说,该标准没有设想将不同类型的分配器分配的指针传递给deallocate
。它仅指定当deallocate
被赋予由同一分配器对象分配的指针,或另一个与此分配器比较相等的同类型分配器时发生的情况
在这一点上,我们有
1.3.24未定义的行为
本国际标准不要求的行为
[注:当本国际标准省略任何明确的行为定义时,可能会出现未定义的行为…]
我很确定这是UB。你应该重新绑定分配器,而不是抛出指针。@Columbo什么是UB?