指针的数组要分类对象和初始化成员值
Array of Pointers to class objects and initializing member values
我正在尝试为数组的每个条目分配内存,并初始化成员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 的新手,我正在尝试理解基本概念。预先感谢您!
这是该代码的真正基本版本,该版本使用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;
}
请注意,出于多种原因,这是一个坏主意,但是如果您需要辅助标准库,因为老师,这就是您去的地方。
在您的示例中,最好使用默认的构造函数来初始化数据和std::vector
来保存自定义类的对象。这将为您节省很多内存处理问题。
class Two {
public:
Two() : part1(0), part2(0) { };
int part1;
int part2;
};
int main() {
std::vector<Two> twoVec(10);
return 0;
}
您为Two
的实例创建了10个指针,但是这些指针并不活化,也不指向任何实例。
这是创建这些实例,将指针存储在数组中的一种方法,然后将其part1
成员设置为1,将part2
成员设置为2;
for (int i = 0; i < 10; i++) {
dp[i] = new Two();
dp[i]->part1= 1;
dp[i]->part2= 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;
}
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员