2010-05-03 88 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++的设计和发展”。 – 2010-05-03 15:02:32

+0

没错,我向我们的祖先道歉 – 2010-05-03 15:06:27

+0

没有构造函数的源代码,我们就没有办法知道。顺便说一句:管理与此无关,所以如果你收回了敏捷的评论,我会很感激,我是使用(普通)C++工作的数以百万计的人之一:) – 2010-05-03 15:11:20

回答

1

我看到的一个问题是您的构造函数需要一个const char *,但是您将它存储在char *中。这将导致编译器抱怨,除非你抛弃了常量。 (或者,是否有任何理由不让你的字段为const char *?我看不到你需要编辑名字的字符......)

+0

澄清:我没有写TF_StringList类,它是我只有标题的第三方类。所以(1)我不知道构造函数中发生了什么,并且(2)不能更改character_encoding上的修饰符。这是如何影响你的答案的? – 2010-05-03 15:02:18

+0

那么,我们不能保证你通过构造函数是通过阅读公共领域得到的 - 只有类的制造者可以保证,而且他们可能不会。 (该名称可以转换为大写,或者查找“最接近的匹配”等) – cHao 2010-05-03 15:15:08

+0

好吧,没有计划验证公共字段的值,只是想知道TF_StringList对象已正确实例化,所以我可以开始使用它的insert(const char *)方法来加载它的值。谢谢 – 2010-05-03 15:19:25

1

我要说的是要看是什么构造函数实际上确实。如果我们假设它这样做:

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

然后你的逻辑成立。但它可以做任何事,你不会在构造函数参数和实例的成员变量之间显示出连接。