小编mas*_*tov的帖子

为什么C++ std :: list :: clear()没有调用析构函数?

看看这段代码:

class test
{
    public:
        test() { cout << "Constructor" << endl; };
        virtual ~test() { cout << "Destructor" << endl; };
};

int main(int argc, char* argv[])
{
    test* t = new test();
    delete(t);
    list<test*> l;
    l.push_back(DNEW test());
    cout << l.size() << endl;
    l.clear();
    cout << l.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

然后,看看这个输出:

    Constructor
    Destructor
    Contructor
    1
    0
Run Code Online (Sandbox Code Playgroud)

问题是:为什么没有调用list元素的析构函数l.clear()

c++ destructor list clear

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

尽管错误共享,速度仍会提高

我一直在对OpenMP进行一些测试,并且由于错误共享数组"sum"而使得该程序不应该扩展.我遇到的问题是它确实可以扩展.更糟":

  • 1个线程:4秒(icpc),4秒(g ++)
  • 2线程:2秒(icpc),2秒(g ++)
  • 4线程:0.5秒(icpc),1秒(g ++)

我真的没有通过英特尔编译器获得从2个线程到4个线程的加速.但最重要的是:为什么扩展如此好,即使它应该表现出错误的共享?

#include <iostream>
#include <chrono>

#include <array>

#include <omp.h>

int main(int argc, const char *argv[])
{
    const auto nb_threads = std::size_t{4};
    omp_set_num_threads(nb_threads);

    const auto num_steps = std::size_t{1000000000};
    const auto step = double{1.0 / num_steps};
    auto sum = std::array<double, nb_threads>{0.0};
    std::size_t actual_nb_threads;

    auto start_time = std::chrono::high_resolution_clock::now();
    #pragma omp parallel
    {
        const auto id = std::size_t{omp_get_thread_num()};
        if (id == 0) {
            // This is needed because OMP might give us less threads
            // than the …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading openmp false-sharing

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

zip文件的MD5哈希

是否可以.zip在Java中为文件生成MD5哈希?我发现的所有示例都是针对.txt文件的。

我想知道何时解压缩数据,编辑文件,再次压缩并找到哈希,它是否会与原始文件不同?

java zip md5-file

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

如何获取我在本地删除但未提交更改的文件?

我删除了本地计算机中的一些文件/文件夹,但我没有将更改提交到存储库.

如何获取已删除的文件?

执行后我没有收到删除的文件p4 sync -f.强制同步后为什么我没有收到已删除的文件?

perforce

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

如何检查引用需要多少字节?

来自Nutshell中的C#5.0:第22页的权威参考 ;

引用类型需要为引用和对象单独分配内存.该对象消耗与其字段一样多的字节,以及额外的管理开销.精确的开销对于.NET运行时的实现本质上是私有的,但至少开销是八个字节,用于存储对象类型的键,以及临时信息,例如多线程的锁状态和标志.指示它是否已被垃圾收集器移动固定.每个对象的引用都需要额外的四个或八个字节,具体取决于.NET运行时是在32位还是64位平台上运行.

我不太确定我完全理解这个大胆的部分.它说在32位平台上一个引用需要四个字节,在64位平台上它需要八个字节.

所以,让我们说我们有

string s = "Soner";
Run Code Online (Sandbox Code Playgroud)

如何检查此s引用所需的字节数?

.net c# reference

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

JAVA:Double.parseDouble + Double.parseDouble = String

我的程序中有这个问题:当我这样做时:

double a = Double.parseDouble(zero);
double b = Double.parseDouble(data);
double c = a+b;
String d = Double.toString(c);
Run Code Online (Sandbox Code Playgroud)

它给我一个回报String.例如,我有0.0英寸a和4.0英寸b,它返回0.04.0.

有人可以向我解释为什么以及我应该做些什么呢?

编辑:这是我的代码:

private void WriteMedia(String data) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("writemedia.txt", Context.MODE_PRIVATE));
        String zero;
        if(ReadMedia().isEmpty() == true)
        {
            zero = "0.0";
            outputStreamWriter.write(zero);
        }
        else {zero = ReadMedia();}
        double a = Double.parseDouble(zero);
        double b = Double.parseDouble(data);
        double c = a+b;
        String d = Double.toString(c);
        outputStreamWriter.write(d);

        outputStreamWriter.close();


    } catch (IOException e) {
        Log.e("Exception", …
Run Code Online (Sandbox Code Playgroud)

java android

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