C++ 创建myNew/myDelete以替换new/new[]/delete/delete[]

C++ 创建myNew/myDelete以替换new/new[]/delete/delete[],c++,memory-management,maintainability,C++,Memory Management,Maintainability,如何将我的程序编码为具有提前接收自定义分配器的灵活性 我编写了一些分配器,但不确定是否真的需要它。 然而,我确信,如果我的自定义分配器将被插入,我希望在某些特定部分使用它 示例 例如,int*B::db应该使用自定义分配器(myNew/myDelete), 而所有std::vector都应使用标准分配器 虽然我仍然没有插入自定义分配器,但我希望我的程序将使用标准new/delete作为默认值 #define myNew new #define myDelete delete class B{ /

如何将我的程序编码为具有提前接收自定义分配器的灵活性

我编写了一些分配器,但不确定是否真的需要它。
然而,我确信,如果我的自定义分配器将被插入,我希望在某些特定部分使用它

示例 例如,
int*B::db
应该使用自定义分配器(
myNew
/
myDelete
),
而所有
std::vector
都应使用标准分配器

虽然我仍然没有插入自定义分配器,但我希望我的程序将使用标准
new/delete
作为默认值

#define myNew new
#define myDelete delete
class B{ //B should not be a template class
    int* db=nullptr;
    std::vector<float> something; //<- let it use default new/delete
    public: B(){
        db=myNew int[5];   //work like "db=new int[5];"
    }
    public: ~B(){
        myDelete[] db;     //work like "delete[] db;"
    }
};
#定义我的新
#定义myDelete删除
类B{//B不应是模板类
int*db=nullptr;

std::vector something;//B可能必须保持非模板。但这并不意味着您不能编写模板来提供帮助。而且您还可以在编写时为RAII提供帮助

template<typename T>
class my_new_heap_array {
  T *ptr;
public:
  operator T*() const { return ptr; }

  my_new_heap_array(std::size_t sz) 
    : ptr(myNew T[sz])
  {}

  ~my_new_heap_array() { myDelete[] ptr; }
};

class B { //B should not be a template class
    my_new_heap_array<int> db;
    std::vector<float> something; //<- let it use default new/delete
    public:
    B()
      :db(5)
    { }
};
模板
为my_new_heap_数组初始化{
T*ptr;
公众:
运算符T*()常量{return ptr;}
我的新堆数组(std::size\t sz)
:ptr(mynewt[sz])
{}
~my_new_heap_array(){myDelete[]ptr;}
};
类B{//B不应是模板类
我的新堆数组数据库;

std::vector something;//实际上不明白你在说什么asking@Passer很抱歉听到这个消息。简言之,问题是“如何使一个程序轻松地打开和关闭自定义分配器?”谢谢。我从来没有见过这样的书。我在哪里可以找到更多的信息/这个技术叫什么?JavalOver——MMMM,IV一直把它当作C++民间传说,我忘了我第一次看到它的地方。我认为“关注分离”的总体设计原则。需要注意的是。如果您发现自己在思考如何在类中自定义某些内容,这通常表明您的类不应该关心如何完成,而应该关注另一个组合到您的业务逻辑中的实用程序类。[/ramble].你的演讲一如既往地充满智慧。它让我看起来所有的编程都更加模块化。在我读了你的评论之后,还有很多其他的事情要考虑。谢谢。