动态创建对象 C++

Posted

技术标签:

【中文标题】动态创建对象 C++【英文标题】:Creating objects dynamically c++ 【发布时间】:2015-02-20 15:05:34 【问题描述】:

嗯,我已经阅读了很多关于这个主题的不同帖子,但没有一个可以解决我的问题。

如何动态创建对象,并将它们存储在链表中。

我有这段代码,一个对象保存一个数字,然后它有一个指向下一个数字的指针,仅用于表示。 例如:17

一个->下一个 = 七个。两者都是同一类的对象。

    class Class
private:
    int value;
    Class *pNext; //Points to the next object in the linked list.
public:
    Class()value = 0;  
    ~Class();

    void setV(int x) value = x;
    int getV()return value;

    //void setP(Class *p) pNext = p; ?? Is this right?
 ;

int main()
Class *pFirst; //pointer to first element
Class *pLast;  //pointer to last element
Class *pCurrent; //pointer to current element

for(int i = 0; i < 4;i++)
    pCurrent = new Class;
    pCurrent->setV(i);
    //pCurrent->setP(NULL);


for(int i = 0; i < 4;i++)
    cout << pCurrent->getV() << " ";


return 0;

谢谢

【问题讨论】:

并销毁 - 不,newed 存储在指针中的对象不会自动销毁,这就是为什么不推荐这样做的原因。 据我所知,您的循环永远不会破坏它创建的对象。它也没有正确链接它们,因此它们没有列出。此外,类构造函数无法初始化所有对象成员,特别是未初始化 pNext 指针,因此遍历“列表”几乎肯定会以崩溃告终。 【参考方案1】:

要使列表永久化,您首先必须声明头节点,然后对于 for 循环中的每次迭代,添加到该列表中。

int main() 


    Class *pFirst; //pointer to first element
    pFirst->setV(0);
    Class *pLast;  //pointer to last element
    Class *pCurrent; //pointer to current element
    pFirst->pNext = pCurrent; // To keep track of the list via head


    for(int i = 0; i < 4;i++) 
    
        pCurrent = new Class;
        pCurrent->setV(i);
        pCurrent->pNext = NULL;
    

    for(int i = 0; i < 4;i++)
    
        cout << pCurrent->getV() << " ";
    

    return 0;

【讨论】:

以上是关于动态创建对象 C++的主要内容,如果未能解决你的问题,请参考以下文章

动态创建对象 C++

C++ 创建对象的动态数组?

在 C++ 运行时动态创建类对象

C++语言动态创建对象

动态数组 C++,新 Obj[size] 的麻烦只创建 1 个对象指针,而不是数组

动态类对象 动态数组