假设有以下类:
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.IN;
using PX.Objects.AR;
using PX.Objects;
using System.Collections.Generic;
using System;
namespace PX.Objects.CS
{
public class ShipTermsDetailExt : PXCacheExtension<PX.Objects.CS.ShipTermsDetail>
{
#region priceCode
public abstract class priceCode : PX.Data.IBqlField
{
}
[PXString]
[PXUIField(DisplayName="Price Code")]
[PXSelector(typeof(Search<ARPriceClass.priceClassID>),
typeof(ARPriceClass.description),
SubstituteKey = typeof(ARPriceClass.description),
ValidateValue = false)]
public virtual string UsrPriceCode { get; set; }
#endregion
#region itemClass
public abstract class itemClass : PX.Data.IBqlField
{
}
[PXString]
[PXUIField(DisplayName="Item Class")]
[PXSelector(typeof(Search<INItemClass.itemClassID>),
typeof(INItemClass.itemClassCD),
SubstituteKey = typeof(INItemClass.itemClassCD),
ValidateValue = false)]
public virtual string UsrItemClass { get; set; }
#endregion
}
}
代码:
class A {
// some data here (let's say - 200 bytes)
public:
void foo();
};
class B {
// some data (150 bytes)
public:
void bar();
}
是否存在未定义的行为? (如果代码A *a = new A();
a->foo();
B *b = reinterpret_cast<B*>(a);
// then we just stop using a
a = nullptr;
// and start using this memory as b
b->bar();
中没有其他地方不再使用,我确信此内存的150个第一个字节对于对象a
非常有效。)
我能找到的只是Storing Lyrics in a MySQL database。我怎么能理解,我正在做的是一个未定义的行为......
当然,我知道使用b
删除这样一块内存可能会有所损失。但我可以使用此代码,或者delete b;
无论如何都是UB?