【问题标题】:Why does new operator throw an error here?为什么 new 运算符会在这里抛出错误?
【发布时间】:2013-12-05 12:42:23
【问题描述】:

class-name object-name = new constructor-name() 抛出错误(代码第 16 行) 由此我可以推断 new 返回一个指针,我的结论是否正确?另外,如果 new 对此不起作用,这是否意味着对象 someObject 是在堆栈上分配而不是在堆上分配的?如果我想在堆上创建一个对象怎么办?

#include<iostream>
using namespace std;
class someClass
{
        public:
                int x;
                someClass()
                {
                        x=6;
                }
};
int main()
{
        someClass someObject;
        someClass *pointerObject;
        someObject = new someClass(); //This line throws error
        pointerObject = new someClass();
        cout<<someObject.x<<endl<<pointerObject->x;
        return 0;
}

p.s:我知道这个问题含糊不清,但我无法用更好的词来表达,对于给您带来的不便,我深表歉意。

【问题讨论】:

  • 这段代码没有编译,应该是someClass* someObject;
  • someObject 已经是一个对象。这不是 Java 或 C#。
  • 在 Java 或 C# 中,您使用 new 创建对象。在 C++ 中你很少这样做,通常你只通过声明它们来创建对象。 someClass someObject; 创建一个对象,不需要new
  • 该行本身并不是“抛出错误”。这在 C++ 中具有非常具体的技术意义。相反,它会导致编译器错误,因为它不是合法的 C++ 代码。

标签: c++ object constructor new-operator heap-memory


【解决方案1】:

因为new 返回pointer,您正试图将其分配给对象。 C++ 不是 C#!

【讨论】:

    【解决方案2】:

    你的第一行main

    someClass someObject;
    

    已经调用了没有参数的默认构造函数。 new 函数返回一个指向对象的指针,然后您尝试将指针分配给一个对象。

    你可能会看here 一些对象和指针的解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2021-06-18
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多