草庐IT

new_setting

全部标签

使用 new 关键字创建的 C++ 对象不呈现;在堆栈上创建的对象确实

编辑:我去掉了所有纹理和法线贴图,但问题仍然存在我正在尝试在屏幕上绘制一大块地形。渲染函数如下所示:voidTerrainChunk::Render(){std::cout在栈上创建对象时TerrainChunkchunk("chunk1.png","grass.png");chunk.Init();它呈现完美。当我用new创建它的时候TerrainChunk*chunk=newTerrainChunk("chunk1.png","grass.png");chunk->Init();什么都没有显示。在这两种情况下,都会调用Render并打印出正确的高度图。我希望这两种情况的行为相同。编

c++ - 使用 Swig 将 std::set 转换为 ruby

我正在使用Swig在ruby​​中使用C++,目前我已经完成了文件david.h的简单示例#includeclassDavid{public:David(intx){this->x=x;}voidannounce(){printf("David%d\n",x);}intx;};还有一个像这样的swig文件%module"david"%{#include%}classDavid{public:David(intx);voidannounce();intx;};我的extconf.rb看起来像这样require'mkmf'system('swig-c++-rubylibdavid.i')o

c++ - Placement-new 与 gcc 4.4.3 严格别名规则

我有一些代码,多年来我一直在成功使用这些代码来实现“变体类型对象”;也就是说,一个C++对象可以保存各种类型的值,但只使用(大约)尽可能多的内存作为最大的可能类型。该代码在本质上类似于标记union,只是它也支持非POD数据类型。它通过使用char缓冲区、放置新/删除和reinterpret_cast来实现这一魔力。我最近尝试在gcc4.4.3(使用-O3和-Wall)下编译这段代码,并收到很多这样的警告:warning:dereferencingtype-punnedpointerwillbreakstrict-aliasingrules根据我的阅读,这表明gcc的新优化器可能会生成

c++ - 在派生类中重写运算符 new/delete

我有一个无状态的抽象基类,各种具体类都从中继承。其中一些派生类也是无状态的。因为它们中的许多是在运行期间创建的,所以我想通过覆盖运算符new()/delete()让所有无状态派生类模拟单例来节省内存和开销。一个简化的例子看起来像这样:#includestructBase{virtual~Base(){}protected:Base(){}//preventconcreteBaseobjects};structD1:publicBase{//statefulobject--defaultbehaviorintdummy;};structD2:publicBase{//statelesso

Starting MySQL. mysqld_safe error: log-error set to ‘/var/log/mariadb/mariadb.log‘,however file don‘

@[TOC](Mysql启动报错并成功解决:StartingMySQL.2023-11-16T06:24:39.857506Zmysqld_safeerror:log-errorsetto‘/var/log/mariadb/mariadb.log’,howeverfiledon’texists.Createwritableforuser‘mysql’.TheserverquitwithoutupdatingPIDfile(/var/lib/mysql/y[FAILED]d))当我们启动MySQL数据库时,一直报错。。。。。。。。。。。。在网上找了很多种方法都无法解决,终于…皇天不负有心人,终于

c++ - std::unordered_(set|map) 基于范围的删除的真实用例是什么?

发现std::unordered_set和std::unordered_map具有基于范围的erase(first,last)这在我看来是另一种射自己腿的好方法。也许有人知道此类功能的实际用例?或者这可能被认为是糟糕的设计? 最佳答案 我认为是为了提供与常规map和set的兼容性。但原则上我还是觉得有用。如果某个范围的值已停用,您希望将它们从集合中移除。但是正常的用例是查找(比插入/删除常见一百万倍)并且不遍历,所以无序版本很好。它怎么能射你?这与循环删除每个没有什么不同。啊,简单的开始,结束范围正向遍历是行不通的,所以你认为提供的

c++ - std::set<K, C>::operator<(const std::set<K, C>&) 不使用 C() 但 std::less()

无法删除我自己的问题,所以改写它... 最佳答案 这实际上不是实现中的错误,尽管它可以说是标准中的错误:23.2.1Generalcontainerrequirements[container.requirements.general]13Table98listsoperationsthatareprovidedforsometypesofcontainersbutnotothers.Thosecontainersforwhichthelistedoperationsareprovidedshallimplementtheseman

c++ - Constexpr 替代 placement new 能够使内存中的对象保持未初始化状态?

我正在尝试创建一个静态容器,它具有基于堆栈的内存并且可以容纳T的N个实例。非常类似于std::vector我希望当前未使用的内存不包含T的初始化项。这通常可以通过placementnew来解决,但不可能在constexpr中使用。使用union我发现了一个技巧,您可以为此使用union,如下所示:templateunioncontainer_storage_type{structempty{};constexprcontainer_storage_type():uninitialized{}{}constexprcontainer_storage_type(value_typev):v

c++ new运算符通过libstdc++占用大量内存(67MB)

我对libstdc++中的new运算符有一些疑问。我用C++编写了一个程序,但在内存管理方面遇到了一些问题。在用gdb调试以确定是什么在消耗我的ram之后,我得到了以下infoprocmappingsMappedaddressspaces:StartAddrEndAddrSizeOffsetobjfile0x4000000x4040000x40000/home/sebastian/Developement/powerserverplus-svn/psp-job-distributor/Release/psp-job-distributor0x6040000x6050000x10000x

c++ - forward_list、set、list 等如何调用 std::allocator?

我注意到分配器只能分配T类型的对象并保留大小为n*sizeof(T)的内存块.std::list内部的链表节点然而,类型不一定是T类型的对象,它们的大小也不一定与T相同对象。那样的话,怎么可能std::list使用std::allocator分配内存? 最佳答案 这就是为什么rebindtype存在。它允许您创建一个类似的分配器,而不是分配其他东西(例如node)。基本上是这样的:std::allocatorint_alloc;std::allocator::rebind>node_alloc;//Perhapsmoreuseful