【发布时间】:2013-10-11 14:51:41
【问题描述】:
编辑:重命名全局变量就可以了。在同一项目的其他 CPP 文件中重复使用了相同的内容。编辑器“混淆”了变量,显示了另一个同名的 shared_ptr 的内容!
感谢所有回答并尝试提供帮助的人;)
在VS2012 IDE,VS2010编译,调试
当从 make_shared 分配时,它不起作用(shared_ptr 保持为 nullptr)。
我可以在调试器中看到调用了类 ctor。
在头文件中
struct ROLLWRKAREA Workarea
{
short idLoc;
// ...
ROLLWRKAREA(short idLocation=LS_NOWHERE) :
idLoc(idLocation),
// …
};
typedef std::shared_ptr<ROLLWRKAREA> LPROLLWRKAREA;
在我的 CPP 中 ->
static LPROLLWRKAREA pWA; // ...and pointer
BOOL CRollEx::OnInitDialog ()
{
CMMDialog::OnInitDialog ();
pWA = std::make_shared<ROLLWRKAREA>();
… pWA 在这一行之后有空 (nullptr)。
这是预期的吗?我在这里做傻事吗?有解决方法吗?我试图避免使用 .reset(new ROLLWRKAREA())
提前致谢
【问题讨论】:
-
我无法开始表达我对
LPROLLWRKAREA这样的类型标识符的看法... -
@Angew 刚刚注意到
-
在您发布的(最少的)代码中没有什么明显的。您能否将SSCCE 从您的实际代码中隔离出来并发布?
-
@KerrekSB 试图对 1995-2000 年的遗留 C 代码进行现代化改造。最初是 typedef struct _ROLLWRKAREA {...} LPROLLWRKAREA*, ROLLWRKAREA; :P
-
@Angew 仅此而已 - 结构中的许多其他基本类型变量在 ctor 中初始化。这里没什么特别的——这就是我感到困惑的原因。顺便说一句:pWA.reset(新 ROLLWRKAREA());也不起作用。可能是因为它是 static 吗?可能是因为我有其他全局变量(在其他 CPP 文件中)具有相同的名称(但内部类型不同)?
标签: c++ visual-studio-2010 stl