Отключить операторы увеличения / уменьшения указателя класса - PullRequest
1 голос
/ 25 ноября 2010

Например, код:

A* pA = new A;

Мне нужно избегать операторов увеличения / уменьшения указателя на этапе компиляции:

pA++; // MUST failed during compilation phase

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

Вы можете объявить pA как

A * const pA = new A;

Это делает pA константным указателем на объект A.Указатель не может быть изменен после инициализации, но его содержимое может.

сравнить

const A *pA = new A;

, который является указателем на объект const A.

Если вы хотитедля перебора массива объектов A получите отдельный указатель.

A * const pAs = new A[size];

for (A * iter = pAs; iter < pAs+size; ++iter)
{
    // do stuff
}
1 голос
/ 25 ноября 2010

Если вы хотите придерживаться необработанных указателей, это невозможно.

Вам нужно обернуть его классом, который не реализует эти операторы (или умные указатели).

1 голос
/ 25 ноября 2010

Это невозможно сделать.

Поскольку я предполагаю, что вы хотите сделать это, чтобы избежать непреднамеренных ошибок, я думаю, что умные (задорные) решения не применяются (в том числе изобретают некоторые классы-оболочки-указатели и т. Д.), Потому что они увеличат вероятность ошибок :)

...