小编cha*_* jc的帖子

为什么我们可以映射到文件但超出文件大小?

例如。

fd = ::open ("/test.txt", O_RDONLY, 0);
struct stat buf;
fstat(fd, &buf);
char* addr = (char*)::mmap(NULL, buf.st_size + 10, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, 0);
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里映射了+ 10。但它仍然有效吗?

为什么系统不进行任何检查?危险吗?

谢谢

c++ linux mmap system-calls

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

为什么我们不能将"="用于shared_ptr或unique_ptr?

我知道语法得到编译错误.

std::shared_ptr<int> p = new int(5);

31 41 E:\temprory (delete it if u like)\1208.cpp [Error] conversion from 'int*' to non-scalar type 'std::shared_ptr<int>' requested
Run Code Online (Sandbox Code Playgroud)

但没关系

std::shared_ptr<int> p(new int(5));
Run Code Online (Sandbox Code Playgroud)

同样的unique_ptr;

但我不知道为什么禁止它.

c++ initialization shared-ptr unique-ptr c++11

4
推荐指数
2
解决办法
579
查看次数

如何避免父类析构函数设置派生类的数据成员

class parent {
    virtual ~parent();
private:
    int father_private;
    int common;
}

~parent() {
    common = 1;
}

class child: public parent {
    ~child();
private:
    int common;
}

~child() {
    common = 2;
}
Run Code Online (Sandbox Code Playgroud)

根据上述逻辑,预计会执行以下步骤:

  1. 叫~child()=> child's common = 2.
  2. 〜parent()被称为=> parent的common = 1?

在第2步中,"这是常见的=孩子的共同点"吗?

我发现地址不一样所以它可能意味着编译器不会取名,而是在类中使用offeset.因此,步骤2的分配可能会将1写入未知地址并导致意外崩溃,我是对的吗?

我发现Andorid本机流有一些类,其构造函数或析构函数可以访问其私有数据成员.它使得继承性成为上述问题的极其困难.你是如何解决这个问题的?

c++

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