C ++: назначить нормальное возвращаемое значение указателю - PullRequest
1 голос
/ 11 апреля 2011

Как назначить нормальное возвращаемое значение функции для указателя?

Например, я хочу присвоить возвращаемое значение этой static функции-члена:

int AnotherClass::getInt();

В следующем выражении:

// m_ipA is a private member of the class `Class`
int *m_ipA;
// Lots of things in between, then :
void Class::printOutput() {
    m_ipA = AnotherClass::getInt();
    // Some operations on m_iPA here, then
    // Print instructions here
}

Нужно ли инициализировать m_ipA ключевым словом new в конструкторе?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 11 апреля 2011

Если m_ipA не указывает ни на одну допустимую ячейку памяти, вам нужно выделить память следующим образом:

m_ipA = new int(AnotherClass::getInt());
2 голосов
/ 11 апреля 2011

Сделайте это:

 m_ipA = new int; //do this also, if you've not allocated memory already.
*m_ipA = AnotherClass::getInt();

Вы можете выделить память в конструкторе класса следующим образом:

Class::Class() //constructor
{
  m_ipA = new int; //allocation
}

void Class::printOutput() 
{
    *m_ipA = AnotherClass::getInt();
}

Class::~Class() //destructor
{
  delete m_ipA; //deallocation
}

EDIT:

Как напомнил М.Салтерс: если вы используете указатели в своем классе, не забывайте копировать ctor и назначение (Правило трех).

Или, может, вы не хотите указатель на int . Я имею в виду следующее может работать для вас:

int m_int; 

m_int = AnotherClass::getInt(); 

Обратите внимание m_int не указатель.

0 голосов
/ 11 апреля 2011
m_ipA = new int;
*m_ipA = AnotherClass::getInt();

//Use m_ipA

delete m_ipA; //Deallocate memory, usually in the destructor of Class.

Или используйте некоторый RAI, например auto_ptr .Чтобы забыть об освобождении памяти.

0 голосов
/ 11 апреля 2011

Нет, у вас нет для - просто убедитесь, что вы разыменовали указатель!

*m_ipA = AnotherClass::getInt(); Вы действительно должны, хотя, если вы намереваетесь постоянно изменять m_ipA

...