c++模版类静态成员引起的怪异问题(跟DLL导出相关),高分相送啊!

jay0518 jay0518 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
hi 各位论坛大小牛:
我今天遇到一个问题,能力有限,解决不了,望各位相助,再次谢谢啦(并高分相送)!
问题描述:
在一个新建的a.DLL工程中,谢了个模版类,头文件内容如下:
//a.h

#pragma once
template <class T>
class Singleton
{
public:
typedef SingleTon<T> Myself;
static MySelf* GetInstance(){
if(instance_ == NULL){
instance_ = new MySelf();
}
return instance_;
}
private:
static MySelf* instance_;
}
template <class T>
SingleTon<T>* SingleTon<T>::instance_ = NULL;
typedef SingleTon<int> IntSingleTon;

此DLL工程中,还有另外一个源码文件,test.h, test.cpp 内含有一个简单的导出函数作为测试:
代码如下:

//test.h
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
TEST_API void PrintTest();


#include "test.h"
#include <stdio.h>
#include "a.h"
TEST_API void PrintTest()
{
printf("IntSington Addr: %p\r\n", IntSingleTon::GetInstance() );
}

以上都是工程DLL中的源码文件,为了测试我又新建了一个Application Console 工程测试,测试代码如下:

#include <stdio.h>
#include "test.h"
int main()
{
PrintTest();
printf("In Exe IntSingleTon Addr:%p\r\n", IntSingleTon::GetInstance() );
return 0;
}

引入DLL关联,编译,运行后,测试结果出乎我的意料:
PrintTest()打印的地址与后面打印语句 打印出两个不同的对象地址。
奇怪了! 急等帮忙! 谢了!



...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
jay0518
C++ 语言 65,214 成员 250,514 内容