小编Fat*_*eep的帖子

类型转换的未定义行为?

请看以下示例:

typedef struct array_struct {
    unsigned char* pointer;
    size_t length;
} array;

typedef struct vector_struct {
    unsigned char* pointer;
    // Reserved is the amount of allocated memory not being used.
    // MemoryLength = length + reserved;
    size_t length, reserved;
} vector;


// Example Usage:
vector* vct = (vector*) calloc(sizeof(vector), 1);
vct->reserved = 0;
vct->length = 24;
vct->pointer = (unsigned char*) calloc(arr->length, 1);

array* arr = (array*) vct;
printf("%i", arr->length);
free(arr->pointer);
free(arr);
Run Code Online (Sandbox Code Playgroud)

C似乎按照它们在结构中定义的顺序为结构成员分配内存.这意味着如果你投射vector -> array你仍会得到相同的结果如果你执行操作array就像你做的那样,vector因为他们有相同的成员和成员的顺序. …

c struct memory-address type-punning

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

C# 删除类的实例?

我是 C# 的新手,我有一个关于类实例的快速问题。有人告诉我,在类的实例上仅使用“null”不足以删除整个实例及其所有资源,例如指针等。所以我有: ClassHere myClass = new ClassHere()myClass = null

我真的必须考虑这个太难了......我将举一个例子来弄清楚GC是如何工作的。

假设我们有 3 个实例:x1、x2、x3。每个实例都将映射到一个变量:ClassHere myClass = new ClassHere()除非您拥有 x1、x2 和 x3 而不是 myClass。

然后说实例 x2 和 x3 对 x1 进行某种引用。假设 x1 在被 x2 和 x3 引用后什么也不做。GC 只会在 x2 之后拾取 x1,而 x3 对 x1 的引用将被删除,对吗?

如果它即使使用这些引用也能找到它。GC 如何知道我是否真的需要 x2 和 x3 引用的实例 x1 而不是删除它?

还是我在这里遗漏了什么?

c# class instance

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

运行时数据类型多态性

我在C++中提出了运行时多态的解决方案.

#include <iostream>
using namespace std;

class base {
    public:
    virtual void call(double xx) {
        cout << "DERIVED: " << xx << endl;
    }
};

template<typename T>
class derivedT : base {
    public:
    virtual void call(double xx) {
        cout << "DERIVED_T: " << ((T) xx) << endl;
    }
};

int main() {
    base* sample = nullptr;

    cout << "CHOOSE TYPE: (BYTE = 1, UINT = 2, DOUBLE = 3)" << endl;
    uint8_t type = cin.get();
    type -= 48;

    switch (type) …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance templates c++17

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