gpt4 book ai didi

c++ - C++中对象的动态内存分配

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:02 27 4
gpt4 key购买 nike

我正在尝试为一个非常简单的 C++ 程序中的对象动态分配(它不像现在那样动态,但最终会动态分配)内存。我是新来的类(class),最近才开始玩 C++,把 C 抛在了后面。这是代码:

#include <iostream>
using namespace std;

class Test {
private:
int i;
public:
Test(int);
~Test();
void print();
};

Test::Test(int ii) { i = ii; }
Test::~Test() { i=0; cout << "deconstructor called...value of i= " << i << endl; }
void Test::print() { cout << "value of i= " << i << endl; }

int main()
{
Test a(10),*b,*c;
//a.print(); // this works

b = new Test(12);
//b->print(); // this works as well

for (int i=0; i<2; i++)
c = new Test(i);

c->print(); /* this shows that the value of i=1 .. should be 0? */
c[0].print(); /* as expected (I guess), this prints i=1 as well... [expected because c->print() shows i=1 also */
c[1].print(); /* shows value of i=0... */

//delete []c; /* this fails miserably, but `delete c` works, why :( */

}

我的很多困惑实际上都包含在代码本身的注释中。我基本上是在尝试创建一个数组 c,其中数组的每个元素都是其自身的一个对象。

评论中描述了我得到的代码的行为。

最佳答案

也许我们应该看看声明,扩展你有:

Test a(10);
Test *b;
Test *c;

您已将 b 和 c 定义为指向测试的指针,但您似乎希望 c 是指向测试的指针的数组。您想要的 c 声明可能是:

Test **c;

你要初始化的:

c = new Test*[2];

for (int i=0; i<2; i++)
c[i] = new Test(i);

并且您将因此访问:

c[0]->print();
c[1]->print();

关于c++ - C++中对象的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com