2013-07-05 4 views
0

Это из официальной документации AutoCAD 2013 (ObjectARX SDK) от компании Autodesk:Что означает символ & *?

ObjectARX для AutoCAD 2013: Readme -> Советы и методы -> Избавление * строки, возвращаемые в Непро- константные указатели: *

При вызове методов, которые возвращают неконстантным струнные указатели (для например, AcDbSymbolTable::getName(char&* pName)), вы должны освободить память, занимаемую возвращаемой строки, например:.

// The getName() call should be followed by a call to 
acutDelString(pLtName);pLtTableRcd->getName(pLtName); 
// ... other code 
acutDelString(pLtName); 

Обратите внимание, что в некоторых образцовых файлах ObjectARX отсутствуют вызовы для бесплатной памяти , поэтому они обнаруживают утечки памяти. При использовании образцов в вашем собственном коде убедитесь, что вы правильно освободили память.

Что делает следующий тип аргумента в виду:

AcDbSymbolTable::getName(char&* pName)) 

ли это указатель на char&? В каком смысле? Когда используется такая конструкция?

спасибо.

ответ

6

В соответствии с clockwise/spiral rulepName является указателем к ссылке char.

Я бы сказал, что не имеет смысла указывать указатель на ссылку. Другой способ (со ссылкой на указатель) может быть полезен, хотя вы можете изменить указатель внутри функции.

+11

Это не просто не имеет смысла, это запрещено стандартом, см. [Dcl.ref]/5 _ "Не должно быть ссылок на ссылки, нет ссылок на массивы времени выполнения, нет массивов ссылок, и никаких указателей на ссылки. "_ –

+0

Я не придумал этот пример. Это из официальной документации AutoCAD от компании Autodesk. –

+0

@Bush Вы должны добавить эту информацию в свой вопрос ... –

3

Это опечатка в документации; что они означают AcDbSymbolTable::getName(char*& pName)).

Если вы читаете это так, остальная часть абзаца имеет смысл: getName - это функция, которая извлекает строку (char *) через параметр out, объявленный как ссылка на строку. Он даже продолжает утверждать, что возвращаемая «строка» должна быть освобождена с использованием acutDelString.

Если вы посмотрите на фактическое объявление в файле заголовка, вы, скорее всего, найдете параметр, объявленный как char*&.