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