Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++手动分配和初始化对象_C++_Memory Management_Allocator - Fatal编程技术网

C++手动分配和初始化对象

C++手动分配和初始化对象,c++,memory-management,allocator,C++,Memory Management,Allocator,我想避免新的,删除或新的位置。我使用C++,因为我需要OOP特性。 上述方法是否有效?我不需要构造函数,只需要编写一个函数InitializeEntity,析构函数也是如此。有什么缺点吗?多谢各位 上述方法是否有效 不在C++中。 要创建动态对象,必须使用新表达式或调用新表达式的函数 有什么缺点吗 缺点是程序的行为没有定义。好的一面是,通过跳过新的位置,您可以少键入几个字符 有一个建议,建议将C风格的小对象隐式创建引入C++。你说你使用C++,因为你需要OOP特性。那么,为什么要在这里使用直C技

我想避免新的,删除或新的位置。我使用C++,因为我需要OOP特性。 上述方法是否有效?我不需要构造函数,只需要编写一个函数InitializeEntity,析构函数也是如此。有什么缺点吗?多谢各位

上述方法是否有效

<>不在C++中。

要创建动态对象,必须使用新表达式或调用新表达式的函数

有什么缺点吗

缺点是程序的行为没有定义。好的一面是,通过跳过新的位置,您可以少键入几个字符


有一个建议,建议将C风格的小对象隐式创建引入C++。

你说你使用C++,因为你需要OOP特性。那么,为什么要在这里使用直C技术呢?这就是对象及其构造函数和析构函数例程的用途。这也是容器类的用途。。。这样您就不会分配连续的内存块并用指针引用它们了!为什么要避免新的安置?它几乎完全是为您的用例而构建的:它基本上只是调用构造函数。然后可以使用Entity->~Entity手动调用析构函数;在通过自定义deallocator释放内存之前。这对OOP来说不仅仅是释放器。继承或多态性在C中更为棘手。@nneonneo如果我没有析构函数怎么办?缺点是代码是未定义的行为;指针指向的位置没有实体对象。Placement new是一种在某个内存位置创建对象的方法。您能给我一个打破上述代码的示例吗?@Gavriil它已经被打破了。程序的行为未定义。
struct entity {
    int x;
};
.........
void* memory = GetMemoryFromMyCustomAllocator();
entity* Entity = (entity*) memory;
Entity->x = 1;