小编cri*_*ell的帖子

C++中的默认结构初始化

假设我有一个看起来像这样的结构(一个POD):

struct Foo
{
  int i;
  double d;
};
Run Code Online (Sandbox Code Playgroud)

以下两行之间有什么区别:

Foo* f1 = new Foo;
Foo* f2 = new Foo();
Run Code Online (Sandbox Code Playgroud)

c++ constructor default initialization

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

为什么分析器需要管理权限(在Windows上)

我一直在为Windows上的本机C++程序评估分析器和内存检查工具,所有这些工具都希望以管理员权限安装运行.我很少在我的机器上以管理员身份登录.如果我需要安装某些东西或做一些需要管理权限的东西,我会使用runas并且它运行良好.

分析器是否合法需要管理员权限,或者探查器开发人员是否只是懒惰?在此基础上拒绝所有这些工具,我是不合理的吗?

我在XP Pro机器上使用VS 2005进行开发.

c++ privileges profiling visual-studio

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

诊断无法停止的应用程序

我们的Windows应用程序经常挂在内存中,我正在尝试使用windbg来追踪问题.我对windbg很新,可以使用一些建议(我已经开始阅读高级Windows调试了).

该应用程序是用VB编写的C++和COM对象的混合体.有时当你退出时,应用程序似乎会消失但是任务管理器会在内存中显示它,显然是空闲的.

!线程告诉我这个:

ThreadCount: 2
UnstartedThread: 0
BackgroundThread: 2
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
                                      PreEmptive   GC Alloc           Lock
       ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
   0    1 175c 001aa040      4220 Enabled  09131b78:09131fe8 001a2b80     0 STA
   6    2 143c 001b4b48      b220 Enabled  00000000:00000000 001a2b80     0 MTA (Finalizer)
Run Code Online (Sandbox Code Playgroud)

对于我未经训练的眼睛,看起来它被一个单线程公寓阻挡的终结队列保持活着.这看起来合情合理吗?

~0kb产量:

ntdll!KiFastSystemCallRet
user32!NtUserGetMessage+0xc
mfc80!AfxInternalPumpMessage+0x18 [f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 153]
mfc80!CWinThread::Run+0x54 [f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 625]
mfc80!AfxWinMain+0x69 [f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\winmain.cpp @ 47]
WARNING: Stack unwind information not available. Following frames may be wrong.
OurApp+0x7e8274
kernel32!BaseProcessStart+0x23 …
Run Code Online (Sandbox Code Playgroud)

c++ com windbg exit hung

5
推荐指数
0
解决办法
2881
查看次数

在 VS2022 (17.0.6) 中使用 C++20 时缺少 MFC CString 运算符 ==() 重载

更新:此问题已在 VS2022 v17.2 Preview 1 中修复

CString当我将 MFC 项目设置为使用 C++20 时,在将字符串文字与实例进行比较时遇到错误。

例如:

CString s1 = _T("s1");
    
// this works
if (s1 == _T("s1")) {
  cout << "Match!"
}

// this generates a compiler error 
if (_T("s1") == s1) {
  cout << "Match!";
}
Run Code Online (Sandbox Code Playgroud)

根据CStringT文档,有很多==重载:

friend bool operator==(const CStringT& str1, const CStringT& str2) throw();
friend bool operator==(const CStringT& str1, PCXSTR psz2) throw();
friend bool operator==(const CStringT& str1, PCYSTR psz2) throw();
friend bool operator==(const CStringT& str1, XCHAR …
Run Code Online (Sandbox Code Playgroud)

c++ mfc c++20

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

在C++中创建多个全局静态实例?

我们为产品使用的库之一使用单例来访问它.我很确定它是作为静态实例实现的(它不是开源的).这适用于单个文档应用程序,但我们的应用程序可能加载了多个文档.我假设访问该实例是这样写的:

Instance* getInstance() {
    static Instance* inst = new Instance();
    return inst;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,有没有办法可以强大地创建多个实例?我唯一能想到的就是不仅要处理并使用某种类型的IPC来将它们联系在一起.我想不出任何不那么黑的东西.

我已经要求供应商实现某种类型的会话令牌,因此我可以拥有多个并发实例,但它们很大而且我们很小.

科里

编辑:

  • 该机器是Windows机器
  • 全球静电基本上是一个大工厂.我想要某种类型的会话令牌,所以我可以很容易地说"从这个会话中释放所有资源"(没有办法重新初始化我所知道的全局静态)

而不是尝试一些狡猾的恶作剧来获得我想要的东西,我将用我自己的类包装整个事物并为每个getter添加一个会话密钥.在内部,我将跟踪已分配的内容添加我自己的发布方法以返回资源.由于很多原因,这是次优的,但我想不出更好的主意.

感谢大家的好评.

c++ singleton static global

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

通用基类是合法的吗?

这似乎有效,但我不是100%肯定它是合法的,并会欣赏一些反馈.

我有一个派生自通用基类的子类.它类似于奇怪的重复模板模式,但不同.

在derived.h中:

template <class T>
class Derived : public T
{
public:
    Derived();
... and some other stuff ...
};
Run Code Online (Sandbox Code Playgroud)

在derived.cpp中:

#include "derived.h"

template <class T>
Derived<T>::Derived()
{
    ...
}

// defining the variations I need here avoids linker errors
// see http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13
template Derived<Base1>::Derived();
template Derived<Base2>::Derived();
Run Code Online (Sandbox Code Playgroud)

在其他一些文件中:

#include "derived.h"

void test()
{
    Derived<Base1> d1;
    Derived<Base2> d2;
    ... do stuff with d1 and d2 ...
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates

4
推荐指数
2
解决办法
462
查看次数

在C++程序中更改stdout的值

我有一个Windows C++程序正在执行以下操作:

  FILE* pf = ...;
  *stdout = *pf;    // stdout is defined in stdio.h

我正在寻找一个解释,当你更改stdout文件句柄的值时会发生什么.这只是重定向标准输出的一种方式吗?

-cr

c c++ stdout filehandle

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

C++:通过类或实例访问const成员变量?

在C++中,有没有理由不通过类实例访问静态成员变量?我知道Java对此皱眉,并想知道它是否在C++中很重要.例:

class Foo {
  static const int ZERO = 0;
  static const int ONE = 1;
  ...
};


void bar(const Foo& inst) {
   // is this ok?
   int val1 = inst.ZERO;
   // or should I prefer:
   int val2 = Foo::ZERO
   ...
};
Run Code Online (Sandbox Code Playgroud)

我有第二个问题.如果我声明一个静态double,我必须在某处定义它,并且该定义必须重复该类型.为什么必须重复这种类型?例如:

In a header:
  class Foo {
    static const double d;
  };
In a source file:
  const double Foo::d = 42;
Run Code Online (Sandbox Code Playgroud)

为什么我必须在cpp文件中重复"const double"部分?

c++ static const

3
推荐指数
2
解决办法
6935
查看次数