【问题标题】:object instantiation in c++C++中的对象实例化
【发布时间】:2014-01-23 18:25:25
【问题描述】:

在 C++ 中,如果你实例化一个类的一个对象,那么对于每个 object 类的所有方法都为新对象复制?

我试图用两个不同的对象指向一个类的方法,但我遇到了问题 带有指向成员的指针。

有什么想法吗?

【问题讨论】:

  • 不能实例化对象,只能实例化类型和模板...
  • @Griwes 对象是类的实例——创建实例通常称为实例化。
  • @Casey,当然,但是您正在实例化 ,而不是对象(IOW:您正在创建类的实例,而不是对象的实例)。

标签: c++ object instantiation


【解决方案1】:

在 C++ 中,如果您实例化一个类的对象,是否会为每个对象复制该类的所有方法以用于新对象?

不,成员函数通常不会复制到任何地方。对于该类类型的每个对象,一个不同的隐式参数 this 被传递给任何非静态成员函数。

【讨论】:

    【解决方案2】:

    不,这绝对是正确的。

    类实例(对象)包含数据成员。函数成员看起来像是“在”类中,但这仅用于范围界定等:您的函数代码不“存在”在类型中,当然也不存在于对象中†支持>.


    I think it could, theoretically,因为标准并没有完全禁止它。但老实说,没有。只是没有。

    【讨论】:

      【解决方案3】:

      一个类的代码只存在一次。

      要获取指向成员函数的指针(可能是您所说的方法),请查看 std::function,而要将函数调用附加到不同的对象,请查看 std::bind

      【讨论】:

      • 这完全不是标准功能所做的。
      • @DeadMG:什么意思?
      • “方法”一词在 C++ 中没有明确定义。你的意思是暗示一个函数是一个成员吗?还是一种非静态的?还是一个虚拟的?还是一种纯粹的?为避免误解,请使用标准化术语:不要说“方法”,而是说“功能”,以那些相关的说明符为前缀。
      • 我尝试使用与原始海报相同的术语,但已将其修改为更难阅读。
      • @woolstar:有时精确是有代价的。在这种情况下,成本确实可以忽略不计......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2019-02-28
      • 2012-04-26
      相关资源
      最近更新 更多