2010-05-03 3 views
1

Хотите проверить, что я понимаю, как это работает.
Есть ++ класса C с одной публичной переменной экземпляра:Вопрос о создании экземпляра C++

char* character_encoding; 

и чей единственный конструктор определен как:

TF_StringList(const char* encoding = "cp_1252"); 

, когда я использую этот класс либо C++/CLI или C++, то первая вещь Я это объявить указатель на объект этого класса:

const TF_StringList * categories; 

Тогда позже я его экземпляр:

categories = new TF_StringList(); 

это дает мне указатель на объект типа TF_StringList, переменная character_encoding которого установлена ​​на «cp_1252»; Итак, все ли логично?

Джим

+1

Почему необходимо загрязнять этот вопрос сомнительным префиксом «неуправляемый». возможно, ошибаюсь, но я уверен, что Stroustrup никогда не писал книгу «Дизайн и эволюция неуправляемого C++». –

+0

Правда, мои извинения перед нашими предками –

+0

Невозможно узнать, не имея исходного кода для конструктора. Кстати, менеджмент не имеет к этому никакого отношения, поэтому я был бы признателен, если бы вы вернули свои быстрые комментарии, я один из немногих миллионов, работающих с (нормальным) C++ :) –

ответ

1

Единственная проблема, которую я вижу, заключается в том, что ваш конструктор принимает const char *, но вы храните его в char *. Это заставит компилятор жаловаться, если вы не отбросите константу. (В качестве альтернативы, есть ли какая-либо причина не создавать ваше поле const char *? I не вижу необходимости редактировать символы названия ...)

+0

Уточнение: я не писал класс TF_StringList, это сторонний класс, для которого у меня есть только заголовок. Итак, (1) я понятия не имею, что происходит в конструкторе, и (2) не может изменять модификаторы на character_encoding. Как это влияет на ваши ответы? –

+0

Ну, мы не можем гарантировать, что то, что вы передали конструктору, - это то, что вы получите от чтения публичного поля - только производитель класса может это гарантировать, и они, вероятно, этого не сделают. (Имя может быть преобразовано в верхний регистр или поиск «ближайшего совпадения» и т. Д.) – cHao

+0

ОК, не планируя проверку значения открытого поля, просто хочу знать, что объект TF_StringList правильно создан, чтобы я может начать использовать метод insert (const char *), чтобы загрузить его со значениями. благодаря –

1

Я бы сказал, что зависит от того, что на самом деле конструктор делает. Если мы предположим, что он делает это:

TF_StringList(const char* encoding) 
: character_encoding(encoding) 
{ 
} 

Тогда ваша логика сохраняется. Но он может делать все, вы не видите связи между аргументом конструктора и переменной-членом экземпляра.

Смежные вопросы