重用已分配的内存

时间:2018-03-05 22:10:20

标签: c++

假设有以下类:

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?

0 个答案:

没有答案