【问题标题】:Is it possible to create a function pointer to the a function's `new` operator/constructor?是否可以创建指向函数的“新”运算符/构造函数的函数指针?
【发布时间】:2011-07-07 01:35:43
【问题描述】:

如果我想参数化创建一个对象,我当然可以创建一个在特定类上调用 new 并传递一个指针的函数。我想知道是否可以跳过该步骤并将函数指针传递给 new 运算符本身。

【问题讨论】:

  • pass a pointer to the new operator itself,什么?!?
  • New 是一个操作符,它的行为类似于一个函数,它返回一个您正在创建的对象的指针。例如,从概念上(如果不是实际上),应该可以创建一个指向它的函数指针,并将其作为参数传递给函数。
  • 正如您所想:void* (*np) (size_t) = &::operator new;。只是我,还是随着时间的推移问题变得越来越拜占庭?额外问题:当你 delete np; 时会发生什么?
  • @Kerrek,嗯,很有趣。我想我应该说一个函数的新运算符。

标签: c++ new-operator function-pointers boost-bind


【解决方案1】:

boost::lambda 提供function wrappers for new and delete. 这些可以用来轻松地将new 调用转换为函数对象。

【讨论】:

    【解决方案2】:

    operator new(以及其他风格)负责分配内存但不构造对象。实际上它的返回类型是void*。构造一个对象的是一个new 表达式,它是语言的一部分,而不是一个函数。所以不可能形成一个指针或对它的引用;这就像形成对return 的引用一样毫无意义。

    【讨论】:

    • 也许不可能,但肯定不像形成对return的引用那样毫无意义。
    • 嗯,通常您会使用自定义的 new-pointer 进行分配,然后将结果传递给 Placement-new 表达式......这并非完全没有听说过。
    • @Catskul 您不能对非函数的函数的引用。那是没有意义的。
    • @Kerrek 请注意,它仍然是构造对象的新表达式。而且你不能形成对它的引用,因为它不是一个函数。
    • @Luc:是的,当然,你不能引用构造对象的过程。我不太确定 OP 想要达到什么目的。
    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2011-06-03
    • 2012-01-02
    相关资源
    最近更新 更多