簡體   English   中英

指向對象和初始化成員值的指針數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM