[英]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;
}
請注意,由於多種原因,這是一個壞主意,但如果您需要支持標准庫, 因為老師那么這就是您要去的地方。
在c ++中,您的示例最好有一個初始化數據的默認構造函數和一個std::vector
來保存自定義類的對象。 這將為您節省大量內存處理問題。
class Two {
public:
Two() : part1(0), part2(0) { };
int part1;
int part2;
};
int main() {
std::vector<Two> twoVec(10);
return 0;
}
你創造了10個指針的情況下Two
,但這些指針不initalized並沒有指向任何實例。
下面是創建這些實例的一種方法,在數組中存儲指向它們的指針,然后將它們的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.