小编And*_*ack的帖子

使用GMock验证析构函数调用

使用GMock,我如何验证是否调用了类的析构函数?有没有办法,除了把它包装在另一个班级

明显的方法,EXPECT_CALL(object, ~classtype())产生编译器错误(gmock不能产生一个调用的mock方法gmock_~classtype).

c++ unit-testing mocking googlemock

11
推荐指数
1
解决办法
6012
查看次数

PIC寄存器(%ebx)有什么作用?

我用C++编写了一个"危险"程序,它从一个堆栈帧到另一个堆栈帧来回跳转.目标是从调用堆栈的最低级别跳转到调用者,执行某些操作,然后再次跳回,每次跳过中间的所有调用.

我这样做是通过手动更改堆栈基地址(设置%ebp)并跳转到标签地址.它完全有效,使用gcc和icc,没有任何堆栈损坏.这一天工作的日子很酷.

现在我正在使用相同的程序并在C中重写它,但它不起作用.具体来说,它不适用于gcc v4.0.1(Mac OS).一旦我跳转到新的堆栈帧(正确设置了堆栈基指针),就会在调用之前执行以下指令fprintf.此处列出的最后一条指令崩溃,解除引用NULL:

lea    0x18b8(%ebx), %eax
mov    (%eax), %eax
mov    (%eax), %eax
Run Code Online (Sandbox Code Playgroud)

我做了一些调试,我已经想通过%ebx在切换堆栈帧时手动设置寄存器(使用我在离开函数之前观察到的值),我修复了错误.我已经读过这个寄存器处理gcc中的"位置无关代码".

什么是位置无关代码?位置无关代码如何工作?这个寄存器指向什么?

c++ x86 assembly gcc cpu-registers

10
推荐指数
2
解决办法
6273
查看次数

如何向extconf.rb添加C++编译器标志

我正在编写一个Ruby扩展,我有一个标准的mkmf配置脚本,但我需要--std=c++0x在所有C++编译步骤中添加一个特殊的include flag().我不希望它在C编译步骤中,因为它会抛出警告.我该怎么做?

require 'mkmf'
create_makefile('thing')
Run Code Online (Sandbox Code Playgroud)

例如,我尝试过$CXXFLAGS << '-I..',但CXXFLAGS尚未定义.如果我使用$CXXFLAGS = '-I..'它,它稍后会被覆盖.

c c++ ruby

9
推荐指数
1
解决办法
1328
查看次数

C,C++,C++ 0x,pthread和boost中的线程

关于C/C++中线程的问题......

C++ 0x语法

#include <thread>

void dummy() {}

int main(int, char*[]) {
   std::thread x(dummy);
   std::thread y(dummy);
   ...
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给this_thread::yield()主?我this_thread::get_id()在主要电话中得到什么?

pthread语法

#include <pthread.h>

void dummy() {}

int main(int, char*[]) {
   pthread_t x, y;
   pthread_create(&x, NULL, &dummy, NULL);
   pthread_create(&y, NULL, &dummy, NULL);
   ...
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给pthread_yield()主?我pthread_self()在主要电话中得到什么?

提升语法

#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给boost::this_thread::yield()主?我boost::this_thread::get_id()在主要电话中得到什么?

c++ multithreading pthreads boost-thread c++11

8
推荐指数
1
解决办法
3905
查看次数

在Mac OS X上使用链接描述文件

有没有办法ld在Mac OS X上使用链接描述文件?

ldLinux上的GNU 程序接受一个-T <scriptname>选项,但在Mac OS -T上是一个未知的命令选项.如果可以解决问题的话,使用GCC的替代安装是可以的.

macos linker gcc linker-scripts

7
推荐指数
1
解决办法
2883
查看次数

在Python中是否有一个漂亮的State Machine框架?

来自Ruby世界,我们拥有美丽的状态机框架,就像最近出现在Rails中的框架一样,我很惊讶在Python中找不到具有相似美感的明显候选人.我想避免自己动手; 面向对象的状态机设计通常要求您在每次添加状态时吊起一堆python(在这种情况下我会经常这样做).

我应该在Python代码中使用的状态机的框架是什么?在进行任何性能或其他考虑之前,我想要最优雅的代码.

python state-machine

6
推荐指数
0
解决办法
6246
查看次数

智能指针是否排除了对两相构造的需求?

两相结构具有以下形状:

struct something {
    something ()
      : p1(NULL)
      , p2(NULL)
    {   }

    ~something () {
        if (p1) delete p1;
        if (p2) delete p2;
    }

    void initialize () {
        p1 = new int(2);
        p2 = new int(5);    // May throw if allocation fails!
    }

    int* p1;
    int* p2;
};
Run Code Online (Sandbox Code Playgroud)

其中一个天真的构造函数(不注意分配失败)将泄漏内存:从不调用部分构造的对象的析构函数.

我的问题:以下代码是安全的,并且通过证据,智能指针是否可以避免两阶段构造?

struct something {
    something ()
      : p1(new int(2))
      , p2(new int(5))
    {   }

    std::unique_ptr<int> p1;
    std::unique_ptr<int> p2;
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor exception-handling c++11

6
推荐指数
2
解决办法
356
查看次数

在Web角色部署期间缺少Microsoft.WindowsAzure.Diagnostics

使用Visual Studio 2012 RC,我从该页面开始使用Azure Cloud Service.我选择了MVC 4,包括一个测试项目,并在构建时启用了NuGet包恢复.

当我部署这蔚蓝的网站,使用Git,似乎目标框不包括任何的WindowsAzure.Diagnostics WindowsAzure.ServiceRuntime图书馆.我一般都是.NET新手,但我无法想象我在这里缺少什么.此外,虽然我可以从参考中删除诊断(没有诊断,没有问题),但似乎我不能对ServiceRuntime做同样的事情.

我做错了什么,或者这是Azure网站中的错误?它可以修复吗?

C:\... [master]> git push azure master
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (12/12), 216.47 KiB, done.
Total 12 (delta 5), reused 0 (delta 0)
remote: New deployment received.
remote: Updating branch 'master'.
remote: Preparing deployment for commit id '2cb9c59bd0'.
remote: Building web project 'MvcWebRole1.csproj'.
remote: ..
remote:   Successfully installed 'Microsoft.AspNet.WebApi 4.0.20505.0'.
remote:   Successfully …
Run Code Online (Sandbox Code Playgroud)

.net c# azure azure-web-sites

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

为什么gettimeofday()间隔偶尔会消极?

我有一个实验性的库,我试图测量它的性能.为此,我写了以下内容:

struct timeval begin;
gettimeofday(&begin, NULL);
{
    // Experiment!
}
struct timeval end;
gettimeofday(&end, NULL);

// Print the time it took!
std::cout << "Time: " << 100000 * (end.tv_sec - begin.tv_sec) + (end.tv_usec - begin.tv_usec) << std::endl;
Run Code Online (Sandbox Code Playgroud)

偶尔,我的结果包括负面时间,其中一些是荒谬的.例如:

Time: 226762
Time: 220222
Time: 210883
Time: -688976
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

c c++ linux timing gettimeofday

5
推荐指数
3
解决办法
7403
查看次数

成功发布POST或PUT请求后,我应该停止重定向吗?

这似乎在Rails社区常见的,至少,要成功应对POST,PUTDELETE通过重定向而不是返回成功的请求.例如,如果我PUT对我的用户个人资料进行了合法更改,那么惯用的回复就是302 Redirect个人资料页面.

这不对吗?我们不应该200 OK从请求中返回吗?或者a 201 Created,在POST请求的情况下?无论如何,在HTTP/1.1状态定义中的任何一个都允许(或必须)包括响应.

我想我不知道,以前我去"修理"我的应用程序,是否存在有一个该死的好理由,为什么社会已经重定向,而不是成功响应的方式.

http

5
推荐指数
1
解决办法
782
查看次数