代码之家  ›  专栏  ›  技术社区  ›  Kraken

从类指针到int[closed]的转换无效

c++
  •  0
  • Kraken  · 技术社区  · 7 年前

    我无法找出下面代码中的问题

    class Node
    {
        private:
            int index, value;
    
        public:
            Node(int index=0, int value=0):index(index),value(value){}
    
            int getIndex()
            {
                return index;
            }
    
            int getValue()
            {
                return value;
            }
    };
    
    
    int main()
    {
        Node n = new Node(10,10);
        return 0;
    }
    

    从Node*到int的转换无效

    3 回复  |  直到 6 年前
        1
  •  5
  •   François Andrieux    7 年前

    new 返回指针。不能将指针分配给 n ,这是一个 Node Node * n = new Node(10,10); auto n = new Node(10,10); .

    然而 使用 不再是现代c++中动态创建对象的推荐解决方案。喜欢 auto n = std::make_unique<Node>(10, 10); n smart pointer . 通过使用智能指针,您不必手动跟踪所有权,也不必记住 delete #include <memory> . 看到了吗 std::make_unique std::make_shared :

    #include <memory>
    
    int main()
    {
        auto n = std::make_unique<Node>(10,10);
        return 0;
    }
    

    Node n{10, 10}; 就足够了。

        2
  •  2
  •   Blaze    7 年前

    如果你想把它放在书堆上

    Node n(10, 10);
    

    如果你想把它堆起来

    Node *n = new Node(10, 10);
    

    对象在堆上分配,而指向它的指针在堆栈上。它的行为比Java的“引用”更符合您的期望。当指针超出范围时,对象不会被删除。相反, delete 必须在某个时候被调用,否则内存将被泄漏(与Java的“引用”不同,后者是垃圾收集的)。

        3
  •  1
  •   NikNye    7 年前

    Node n = new Node(10,10);
    

    应该是

    Node* n = new Node(10,10);
    

    错误消息是因为new返回的值是内存中的一个数字位置,并且编译器知道表示该位置的最接近的数据类型是int。