C/C++开发
我有一个C++项目,其中我使用Google测试来编写单元测试。这个项目已经存在了一段时间,而且相当混乱,所以我只是在主函数的开头添加了一行代码,用于启动单元测试,然后退出程序。然后,我会注释和取消注释此行,以便在单元测试和实际应用程序之间进行切换。 仅当我使用我的代码时,这工作得很好,但现在我正试图用两个项目和.exe文件来解决这个问题,一个用于实际应用程序,一个用于测试,就像Toussa的答案
..
我有一公吨的使用Google测试的单元测试。 目前正在使用XCode,我注意到其他一些测试框架会在每个单元测试的末尾检测内存泄漏,我假设有一种规定的方法可以用Google测试来做同样的事情。我希望这不是Boost测试的一个功能,也不是仅有的几个其他功能。 如果有人能给我指路,我将不胜感激。而是避免切换测试框架。 现在,我认为valgrind可能值得研究一下,我只是不确定如何连接到
..
当断言_*宏会导致测试用例终止时,Expect_*宏会继续求值。 我想知道决定使用其中一个的标准是什么。 推荐答案 当必须满足条件时,使用ASSERT-如果不满足,则测试立即停止。如果没有此条件,则在测试的其余部分不具有语义意义时使用此选项。 当条件应该成立时使用EXPECT,但在条件不成立的情况下,我们仍然可以从继续测试中获得价值。(不过,测试最终仍将失败。) 经验法则是
..
我正尝试在单元测试中使用GMock。但链接失败,并出现下一个错误: In function `testing::internal::linked_ptr_internal::depart()': /home/user/googletest/googletest/include/gtest/internal/gtest-linked_ptr.h:127: undefined reference
..
我有一个类,比如说ClassA,它既有一些公共函数也有一些私有函数。 公共函数轮流类私有函数。 现在我在这里的目的是通过公共函数测试私有函数。 对于公共函数,我尝试调用原始实现,而对于私有方法,我尝试创建一个Mock函数。 我的A班是这样的 class ClassA { public: string getName(string key) { int value
..
class A : boost::noncopyable{ }; class B{ A & conn() const; }; 我该如何声明和实现conn()呢: conn应创建并返回对A类型对象的引用。 我不能使用B在客户端代码中中断B的接口 我想防止代码泄漏内存,所以我不能简单地返回 对堆中对象的引用。 我没有找到任何不会破坏客户端代码的智能指针实现,因为没有转换为
..
TLDR 为什么t_ptr = std::unique_ptr(t_ptr.get());行导致调用析构函数? 该行似乎只是无意地将t_ptr分配回它自己... 此外,为什么我能够在假定的销毁之后继续调用方法? 示例代码 class Test { public: Test() { printf
..
一般问题 现在我读了很多关于智能指针的文章,在很多情况下,共享指针似乎是“完美的”。然而,我也读到了周期性引用或类似的东西?哪里不能使用shared_ptr?我很难理解这一点,有谁能举一个简单的例子来说明这一点吗? 我真的想知道,弱_ptr提供了什么普通指针不能提供的?-因为它们不增加引用计数,所以它们不能保证它们所指向的内存仍然有效? 我的个人项目: 在一个项目中,我有两个“全局
..
我有以下代码: unsigned char* frame_buffer_data{ new unsigned char[data_size] }; glReadPixels(origin_x, origin_y, width, height, GL_BGR, GL_UNSIGNED_BYTE, frame_buffer_data); 我要删除原始指针(frame_buffer_data)
..
到目前为止,我已经为一些数据处理分配了缓冲区,然后将其删除。由于代码变得更大,并且在某些情况下可能会发生异常,我考虑使用std::unique_ptr使其更安全,并提出了这些解决方案: unique_ptr p1( (char*)operator new(bufSize), operator delete); unique_ptr
..
我想知道为什么Make_Unique调用复制构造函数而不调用默认构造函数。 Node() { std::cout
..
我想使用智能指针实现一个简单的引用计数。变量pointer表示指向存储对象的指针,reference_count表示对象副本的总数。 如果我们使用NULL初始化对象:Reference_count=-1否则Reference_Count=1 COPY CTOR AND OPERATOR=INCREMENT REFERENCE_COUNT 析构函数递减Reference_count,如果没
..
我有一个unique_ptr的集合。这里我想获取其中的一些并将它们返回给调用者。调用者只需要读取内容,所以我想使用常量引用。但我不确定如何使用unique_ptr%s执行此操作。 以下是我使用原始指针执行此操作的一些代码: class entry { }; vector master; const vector get_entries() {
..
似乎有两种方法可以临时获取weak_ptr指向的资源的所有权: 使用lock() 将weak_ptr传递给shared_ptr构造函数 这两个函数都产生shared_ptr,在weak_ptr为空的情况下,锁返回nullptr,shared_ptr构造函数抛出异常。 因此,问题是:应该在什么时候使用其中之一?是否有与此相关的一般指导原则或最佳实践? 推荐答案 复制自ht
..
我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回之前对一些数据进行预处理/填充。此预处理可能返回FALSE,以表示此缓冲区未正确处理。因此,我要对此缓冲区应用RAII,以避免在没有delete[]它的情况下提前返回。 通常我使用unique_ptr来帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(归unique_ptr所有),并将所有权转移给调用者。但编译器抱怨说
..
首先,由于存在不同类型的智能指针,我想将这个问题集中在其中的两个上:引用计数的侵入式和非侵入式智能指针。针对每种指针类型分别询问该问题。 我真的不确定如何表达我的问题,所以我不是在问: 我不是在问为什么或什么时候需要聪明的指针。我也不应该使用哪种类型的智能指针以及使用这些指针的目的。 以下是我要问的问题,我希望它足够清楚:当处理“智能管理”对象时,我应该在哪些上下文中使用哪些指针语义?即智
..
与普通指针相比,使用自动指针(AUTO_PTR)有哪些优点和缺点?我听说它可以自动释放内存,但为什么不经常使用呢? 推荐答案 std::auto_ptr的主要缺点是它具有过户语义。这使得std::auto_ptr无法存储在STL容器中,因为这些容器在您存储或获取元素时使用复制构造函数。 此外,我注意到std::auto_ptr的另一个重要方面是它们不能用于PIMPL习语的使用。这是因
..
(假设我正在使用的库或框架需要使用原始指针) 使用拥有某些数据的智能指针,然后将取消引用的智能指针的地址传递给需要原始指针的函数是否有效? 推荐答案 是的,这是有效的做法。std智能指针具有专门用于get()成员函数。 通常,当您通过智能指针管理对象时,当这些函数暗示所有权语义时,您应该只将整个智能指针对象按原样传递给其他函数:如果函数将复制std::shared_ptr,则它
..
通过SHARED_PTR,您可以使用自定义删除器,如: auto fp = shared_ptr( fopen("file.txt", "rt"), &fclose ); fprintf( fp.get(), "hello " ); 并且无论函数如何退出,它都会记住fclose文件。 但是,重新计算局部变量似乎有点过分,所以我想使用unique_ptr: auto f
..
无法理解此操作失败的原因? int *p = new int(10); std::unique_ptr ptr(p); // Below line gives compilation error. std::cout
..