小编Gaz*_*zoo的帖子

在Visual Studio 2012中单元测试exe中的C++代码时阻力最小的路径

我在这里需要一些圣人的建议.长话短说,我正在重建 - 对我来说 - 相对复杂的应用程序,包含大约7000行代码.当我创建应用程序的第一次迭代时遇到了许多问题,在我看来,测试驱动的开发可能只是票证.

我很高兴看到Visual Studio 2012现在原生支持C++中的TDD,所以我继续尽可能多地阅读.不幸的是,Vs2012相当新,我觉得文档有点缺乏.但这有点不合时宜.我主要依赖于MSDN网站上的以下指南:

http://msdn.microsoft.com/en-us/library/hh419385.aspx#objectRef

它相当清楚地表明,如果要测试的代码是作为.exe构建的,那么前进的方法是创建一个单独的测试项目并链接输出对象文件.我猜他们的意思是对象文件?或者可能不是?

我真的有点困惑,我需要链接多少.obj.起初我以为我需要链接每个相当乏味的obj文件.

如果有人有这方面的经验,也许还可以推荐使用哪些宏或类似的捷径,以使这个过程尽可能轻松,我会非常感激!

c++ unit-testing visual-studio-2012

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

删除std :: unique_ptr <Base>容器中的派生类

我有点困惑.基本上,我有两个不同的资源管理器(AudioLibrary和VideoLibrary),它们都从共享的BaseLibrary类继承.此基类包含对音频和视频的引用.音频和视频都从名为Media的父类继承.

我将数据保存在地图中,填充了unique_ptr.但令我惊讶的是,我发现当这些指针最终通过.erase被删除时,只调用了Media的基本析构函数.

我想我错过了一些东西,但我认为编译器/运行时库会知道它指向视频或音频并将其称为析构函数.

似乎并非如此.我被迫做这样的事情来实际收回我的所有资源:

void AudioLibrary::deleteStream( const std::string &pathFile )
{
    auto baseStream = mStreams[ pathFile ].release();
    mStreams.erase( pathFile );

    // Re-cast!
    auto aStream = static_cast<AudioStream*>( baseStream );
    delete aStream;
}
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?

更新:

你没事 - 当然这是析构函数缺失的'虚拟'.我想我最近只是想到虚拟和继承意味着什么越来越少,并且让我的头脑失去了它的功能,而不是概念本身.偶尔会发生在我身上.

c++ inheritance destructor unique-ptr c++11

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