我正在尝试为数组的每个条目分配内存,并将成员part1和part2初始化为0.
#include <iostream>
using namespace std;
class Two {
public:
int part1;
int part2;
};
int main() {
Two * dp[10]; //array of 10 pointers to objects of class Two
part1 = 0;
part2 = 0;
for (int i = 0; i < 10; i++) {
dp[i] = 0;
}
return 0;
}
感谢任何帮助。我是c ++的新手,我正在努力理解基本概念。提前谢谢!
答案 0 :(得分:3)
这是使用new
分配内存的代码的真正基本版本:
#include <iostream>
class Two {
public:
Two() : part1(0), part2(0) { };
int part1;
int part2;
};
int main() {
const size_t count = 10;
Two *dp = new Two[count];
// Do stuff?
for (size_t i = 0; i < count; ++i) {
std::cout << dp[i].part1 << "/" << dp[i].part2 << std::endl;
}
delete[] dp;
return 0;
}
请注意,由于多种原因,这是一个坏主意,但如果您需要支持标准库,因为老师,那么这就是您要去的地方。
答案 1 :(得分:1)
在c ++中,您的示例最好有一个初始化数据的默认构造函数和一个std::vector
来保存自定义类的对象。
这将为您节省大量的内存处理问题。
class Two {
public:
Two() : part1(0), part2(0) { };
int part1;
int part2;
};
int main() {
std::vector<Two> twoVec(10);
return 0;
}
答案 2 :(得分:0)
您创建了10个指向Two
实例的指针,但这些指针并未初始化,也没有指向任何实例。
以下是创建这些实例的一种方法,在数组中存储指向它们的指针,然后将其part1
成员设置为1,将part2
成员设置为2;
for (int i = 0; i < 10; i++) {
dp[i] = new Two();
dp[i]->part1= 1;
dp[i]->part2= 2;
}
答案 3 :(得分:-2)
您需要分配数组元素指向的class Two
类型的对象。否则程序将具有未定义的行为。
您可以使用标准算法std::generate
这样做
#include <iterator>
#include <algorithm>
//...
Two * dp[10]; //array of 10 pointers to objects of class Two
std::generate( std::begin( dp ), std::end( dp ),
[] { return new Two { 0, 0 };} );
或者您可以使用基于范围的循环。例如
Two * dp[10]; //array of 10 pointers to objects of class Two
for ( Two * &p : dp ) p = new Two { 0, 0 };
这是一个示范程序
#include <iostream>
using namespace std;
class Two {
public:
int part1;
int part2;
};
int main()
{
Two * dp[10]; //array of 10 pointers to objects of class Two
for ( Two * &p : dp ) p = new Two { 0, 0 };
// processing of the array
for ( Two * &p : dp )
{
delete p;
p = nullptr;
}
return 0;
}