【问题标题】:Is this piece of code creating a class object? If that so why using it this way这段代码是在创建一个类对象吗?如果是这样,为什么要以这种方式使用它
【发布时间】:2020-04-29 20:29:57
【问题描述】:
ClassName *name = new ClassName();

上面的这段代码是否创建了一个名为“name”并键入“ClassName”的对象? 如果是那么为什么我们不能像这样使用ClassName name();? 为什么我们使用“new”关键字?是因为我们在堆上创建它吗?

【问题讨论】:

  • 你知道,你为什么使用*吗?如果你知道这一点,回来再问同样的问题
  • new 用于指定动态分配。为什么您会选择使用它而不是自动分配是上下文相关的,并且基于一长串因素。最好的办法是寻找预先存在的信息。
  • 我知道它持有地址的指针
  • 那么延伸一下,operator new 做了什么?
  • ClassName name(); 这不是对象创建,而是函数声明。

标签: c++ object pointers new-operator


【解决方案1】:

没有。这段代码没有创建名称为“name”并键入“ClassName”的对象。

它正在创建和初始化一个名为“name”的对象,并输入“pointer to ClassName”。变量“name”将包含“ClassName”类型的完全构造对象的地址。这称为“构造动态存储时长的对象”。

为什么要构造动态存储期限的对象?答案是其他三种类型的存储持续时间(自动、静态、线程本地)不合适,它是您要解决的问题的最佳解决方案。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 2021-11-11
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多