【发布时间】:2011-01-20 07:02:21
【问题描述】:
我在以下代码中遇到运行时崩溃,也无法调试。请查看并让我知道发生了什么。
// CppConsole.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <assert.h>
class Test : public std::tr1::enable_shared_from_this<Test>
{
public:
Test():x(0),y(0),z(0){};
int x;
float y;
double z;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::tr1::shared_ptr<Test> t1(new Test);
std::tr1::shared_ptr<Test> t2 = t1->shared_from_this();
return 0;
}
我已经包含了所有标题,并且程序编译正常。这是我得到的错误:
CppConsole.exe - 未找到入口点 过程入口点 ?_Xweak@tr1@std@@YAXXZ 找不到动态链接 库 MSVCP90D.dll
如果我注释掉这一行
std::tr1::shared_ptr t2 = t1->shared_from_this();
程序运行没有崩溃。
更新:问题可以暂时关闭。我将尝试安装 VS 功能包并查看程序执行时没有任何崩溃的天气。
【问题讨论】:
-
您缺少
shared_ptr对象的模板参数列表。即便如此,这里还是发生了一些奇怪的事情。我看不出有什么明显的错误,如果我添加#include <memory>并修复声明,我在 VC10 下的这段代码没有问题(可能在 VC9 中存在问题,这a 您正在使用,但那将是不寻常的。)您使用什么设置来编译这个项目?如果你只是在 Visual Studio 命令行上编译这个 .cpp 文件(cl test.cpp或任何文件名),会发生什么? -
我使用的是在 WinXP SP3 上运行的 VC9。我已经包含了所有标题,编译不是问题。据我所知,创建共享指针的实例我不需要模板参数列表。这是正确的吗?
-
不,不是。
shared_ptr什么?这就是模板的用途。发布您真实的确切代码。 -
这是我试图理解共享指针和 enable_shared_from_this 概念的真正确切代码。请注意,创建 t1 指针的实例永远不会失败,只有当我尝试使用调用 t1->shared_from_this() 创建实例 t2 时,程序才会崩溃。
-
如果您不介意,我想看看确切的、从头到尾的 .cpp 文件,它在没有
shared_ptr的模板参数列表的情况下编译。我很着迷这会奏效。
标签: c++ smart-pointers tr1