小编Tob*_*ias的帖子

如何声明和使用重载池操作符删除?

我想知道如何将C++ - FAQ-lite的第11.14节适用于数组.

基本上,我想要这样的东西:

class Pool {
public:
  void* allocate(size_t size) {...}
  void deallocate(void* p, size_t size) {...}
};

void* operator new[](size_t size, Pool& pool) { return pool.allocate(size); }
void operator delete[](void* p, size_t size, Pool& pool) { pool.deallocate(p, size); }

struct Foo {...};

int main() {
  Pool pool;

  Foo* manyFoos = new (pool) Foo [15];

  /* ... */

  delete [] (pool) manyFoos;
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚声明和调用它的正确语法operator delete[] (pool).有人可以帮忙吗?

c++ arrays memory-management memory-pool delete-operator

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

通过频道传递的消息是否保证是非阻塞的?

为了评估go是否是音频/视频应用程序的可能选项,我想知道传入的消息是否满足任何非阻塞进度保证(无障碍,无锁或无等待).特别是,以下方案是相关的:

单生产者单一消费者:

两个线程使用共享通道进行通信.线程A只做异步发送,线程B只做异步接收.假设OS调度程序决定在"最坏的可能时刻"中断线程A一段无限的时间.线程B是否保证在有限数量的cpu周期内完成接收操作,或者是否有(理论上)线程A可以将信道置于线程B需要等待OS恢复线程A的状态?

多个生产者:

多个线程A1,A2,A3,......使用共享信道与一个或多个其他线程通信.线程Ai只进行异步发送.假设操作系统调度程序在"最坏的可能时刻"暂停A2,A3,...,无限期.线程A1是否仍然保证在有限数量的cpu周期内完成发送操作?进一步假设每个线程只想做一次发送.如果程序运行得足够长(使用"恶意"调度程序可能会使某些线程或中断匮乏并在"最糟糕的时刻"恢复线程),至少有一个发送保证成功吗?

我对这里的典型场景并不是那么感兴趣,而是最坏情况的保证.有关阻塞,锁定和无等待算法的更多详细信息,请参阅非阻塞算法(Wikipedia).

channel nonblocking go lock-free

8
推荐指数
2
解决办法
3569
查看次数

如何对用GLSL编写的OpenGL着色器进行单元测试?

我是OpenGL和GLSL的新手.我想要TDD着色器,但除了glsl-unit之外没有找到任何主题,glsl-unit似乎是特定于WebGL的.

单元测试着色器是否有"标准"方式?这方面的最佳做法是什么?是否有GLSL的单元测试框架?

如果它有帮助,我的目标是针对iOS设备的OpenGL ES 2.0.

tdd opengl-es glsl

8
推荐指数
0
解决办法
2227
查看次数

有必要让QtQuick 2的Canvas元素HiDPI-(视网膜 - )知道吗?

我有以下qml应用程序:

import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import QtQuick.Window 2.0

ApplicationWindow {
    id: window
    width: 480
    height: 240


    RowLayout {

        Rectangle {
            width: window.height
            height: window.height
            radius: window.height / 2
            color: "black"
        }

        Canvas {
            id: canvas
            width: window.height
            height: window.height

            onPaint: {
                var ctx = canvas.getContext('2d');
                var originX = window.height / 2
                var originY = window.height / 2
                var radius = window.height / 2

                ctx.save();

                ctx.beginPath();
                ctx.arc(originX, originY, radius, 0, 2 * Math.PI);
                ctx.fillStyle = Qt.rgba(0, …
Run Code Online (Sandbox Code Playgroud)

canvas qml retina-display

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

在什么情况下vtable指针可以为null(或0x1)?

我正在调试一个崩溃日志.发生崩溃是因为(c ++ - )对象的vtable指针是0x1,而对象的其余部分似乎可以从崩溃日志中看出来.

程序在尝试调用虚方法时崩溃.

我的问题:在什么情况下vtable指针变为空?operator delete是否将vtable指针设置为null?

这在OS X上使用gcc 4.0.1(Apple Inc. build 5493)发生.

c++ crash macos gcc vtable

7
推荐指数
3
解决办法
4802
查看次数

heroku上有哪些熵源?

我想将一个应用程序部署到heroku,它需要能够生成加密安全的随机数.我可以使用哪些熵源?

cryptography heroku entropy

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

"组合算法"和"线性算法"之间有什么区别?

或者更确切地说,组合算法和线性算法的定义是什么?

为了说清楚,因为很明显第一响应者误解了这个问题:我不是在寻找在线性时间与非线性时间运行的算法的定义.线性算法以某种方式与线性编程相关,线性编程是用于查找或近似线性优化问题的解决方案的技术.

由于NP难问题是如此困难,有一个完整的领域试图找到近似的解决方案.例如,旅行商问题具有几个近似解,其在多项式时间内运行并产生在最佳解的给定界限内的解.

这些近似算法中的一些称为线性算法,其他算法称为组合算法; 而后者似乎更受欢迎(为什么?).这些是我想要理解的两个概念.

np-complete approximation

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

在传递给模拟函数的参数上调用成员函数的最简单方法是什么?

给定接口

class IFooable {
  virtual void Fooable() = 0;
};

class IFoo {
  virtual void Foo(IFooable* pFooable) = 0;
};
Run Code Online (Sandbox Code Playgroud)

和古尔模拟模拟

class TMockFoo : public IFoo {
  MOCK_METHOD1(Foo, void (IFooable*));
};
Run Code Online (Sandbox Code Playgroud)

指定调用Fooable()模拟方法参数的操作的最简单方法是什么Foo()

我努力了

TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WithArg<0>(Invoke(&IFooable::Fooable));
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为Invoke()只有一个参数需要一个自由函数,而不是成员函数。

使用boost::bind应该可以工作,但不一定会使代码太可读。在编写自定义之前Action,我想检查一下是否遗漏了一些完全明显的东西。

c++ googlemock

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

LLVM汇编语言的稳定性如何?

LLVM语言参考指出,它可用于

作为磁盘上的bitcode表示(适合Just-In-Time编译器的快速加载)

这种表现有多稳定?例如,我现在可以使用LLVM 3.1生成它,并且仍然期望它可以使用未来的LLVM,比如三年假设的LLVM 4.5吗?

假设我没有外部依赖项,我可以使用它为不同的架构生成二进制文件吗?

assembly llvm intermediate-language

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

如果析构函数有副作用并且对象是从另一个静态对象的析构函数访问的,如何进行静态反初始化?

有一个简单且众所周知的模式可以避免静态初始化失败,在C++ FAQ Lite 的第 10.13 节中进行了描述。

在这个标准模式中,有一个权衡是构造的对象永远不会被破坏(如果析构函数没有重要的副作用,这不是问题)或者不能从另一个静态对象的析构函数安全地访问静态对象(请参阅C++ FAQ Lite 的 10.14 节)。

所以我的问题是:如果静态对象的析构函数具有最终必须发生的重要副作用并且静态对象必须由另一个静态对象的析构函数访问,那么您如何避免静态反初始化失败?


(注意:FAQ-lite 提到这个问题在C++ FAQs: FAQs 16.17 of C++ FAQs: FAQs by M. Cline and and and G. Lomow 中得到了回答。我无权阅读这本书,这就是我问这个问题的原因。 )

c++ destructor initialization-order static-initialization

4
推荐指数
1
解决办法
2308
查看次数