小编bjs*_*123的帖子

如何在没有显式设置的情况下使对象指针为NULL,而不显式删除和没有静态函数?

我正在开发一个c ++应用程序.在我的代码中,我有一个像TestClass的对象指针*pObj = new TestClass(); 和成员函数调用如pObj-> close(); 在close()成员函数内部,我应该将pObj设为NULL.根据我们的要求,TestClass用户不应该在pObj上调用delete.(TestClass的析构函数是故意为此目的而私有的)另外,TestClass不应该公开任何静态方法来接收指针并使其为NULL.

一旦调用close(),还有其他方法可以使pObj为NULL吗?

我试过一种方法.在close()函数内部,我使用const_cast删除了此指针的constness.并参考了它.然后我做了这个= NULL.即使再调用一边,pObj指针值仍然存在.它没有设置为NULL.这可能是由于该指针的地址和pObj的地址不同.请帮忙.

编辑:对不起,我错过了什么.在一个名为init的静态函数中调用new.init函数如下所示.void init(TestClass*&pObj); 因此,TestClass用户首先调用init进行分配.但他不能叫deinit(不应该有任何这样的功能)实际上,这不是我的设计.当我进入这个项目时它出现了:(

c++

1
推荐指数
2
解决办法
715
查看次数

运行时类型比较

我需要找到指针指向的对象类型.代码如下.

//pWindow is pointer to either base Window object or derived Window objects like //Window_Derived.
const char* windowName = typeid(*pWindow).name(); 
if(strcmp(windowName, typeid(Window).name()) == 0)
{
  // ...
}
else if(strcmp(windowName, typeid(Window_Derived).name()) == 0)
{
  // ...     
}
Run Code Online (Sandbox Code Playgroud)

由于我不能使用switch语句来比较字符串,我被迫使用if else链.但是随着我拥有的窗口类型的数量很多,这个if else链变得太长了.我们可以使用开关或更简单的方法检查窗口类型吗?

编辑:我在记录器模块中工作.我想,记录器不应该为了记录目的而调用派生类虚函数.它应该自己做.所以我放弃了虚拟功能方法.

c++ rtti

1
推荐指数
1
解决办法
2736
查看次数

如何检查是否为给定的UTC偏移启用了日光节约?

我需要确定是否为Linux(Redhat)中的给定UTC偏移启用了日光节省.我得到了诸如UTC + 05:30的输入.我检查了zdump命令的用法.与时区名称一起使用时,我们可以检查输出中isdst的值,以确定夏令时的状态.

zdump -v/usr/share/zoneinfo/Asia/Kolkata | grep 2013

如上所述,zdump需要区域名称.它不接受UTC偏移.

我也尝试了如下的本地时间功能.

time_t currtime;
struct tm * timeinfo;
timeinfo = localtime ( &currtime );
time_t local = mktime( timeinfo );
cout<<timeinfo->tm_isdst<<endl;
Run Code Online (Sandbox Code Playgroud)

在日期时间设置中设置时区名称时,上述代码有效.如果系统使用UTC时间,它不起作用.当使用UTC时间时,我使用gmtime而不是localtime.

如果有任何方法可以确定是否使用UTC偏移来启用dst,请告诉我.

c c++ linux redhat

1
推荐指数
1
解决办法
877
查看次数

根据继承用法,不允许以下哪一项?

从这里开始,

使用继承,不允许以下哪项

a)通过子类更改父级操作的实现

b)子类使用父类中的操作实现

c)子类使用父类中的属性

d)操作是父类中不存在的子类

e)没有

我不相信上述链接的答案,所以试着在这里澄清一下.请回答.

c++

0
推荐指数
1
解决办法
260
查看次数

标签 统计

c++ ×4

c ×1

linux ×1

redhat ×1

rtti ×1