草庐IT

make_new_type

全部标签

c++ - std::string 和 placement new

我发现了这个在C++中使用placementnew的例子,它对我来说没有意义。我认为这段代码容易出现异常,因为可能会使用比分配的内存更多的内存。char*buf=newchar[sizeof(string)];string*p=new(buf)string("hi");如果“string”是C++STD::string类,那么buf将得到一个分配空字符串对象的大小(我的编译器给出了28个字节),然后我看到它的方式如果你用更多的字符初始化你的字符串你可能超过分配的内存。例如:string*p=new(buf)string("hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

c++ - make_pair 是在栈上还是堆上?

如果我从不同的范围将它插入到map中,是否需要分配一对?#include#include#include#includeusingnamespacestd;voidparseInput(intargc,char*argv[],unordered_map*inputs);intmain(intargc,char*argv[]){unordered_map*inputs=newunordered_map;parseInput(argc,argv,inputs);for(auto&it:*inputs){cout*inputs){inti;for(i=1;iinsert(make_pair(

c++ - Visual Studio 2010 中 std::make_shared() 的友元函数(不是 Boost)

如何创建std::make_shared()的友元函数。我试过:classMyClass{public:friendstd::shared_ptrstd::make_shared();//or//friendstd::shared_ptrstd::make_shared();protected:MyClass();};但它不起作用(我使用的是VisualStudio2010SP1) 最佳答案 如何向您的类添加一个静态方法:classFoo{public:staticshared_ptrcreate(){returnstd::shar

c++ - C2556 : overloaded function differs only by return type

我正在阅读EffectiveC++,它告诉我“可以重载仅因常量不同而不同的成员函数”。书中的例子是:classTextBlock{public:constchar&operator[](std::size_tposition)const;char&operator[](std::size_tposition);private:std::stringtext;}我下面的示例使用了一个存储指针。classA{public:A(int*val):val_(val){}int*get_message(){returnval_;}constint*get_message(){returnval_

C++ 错误 : deduced conflicting types for parameter 'T' string vs const char *

因此,我正在为双端队列容器编写一个简单的模板化搜索函数。这是代码:templatevoidsearchInDequeFor(std::dequeDeque,TsearchValue){for(constauto&element:Deque){if(Deque.empty()){std::cout下面是我在main中调用函数的方式:dequemyDeque={"apple","banana","pear","blueberry"};searchInDequeFor(myDeque,"pear");这是我遇到的错误:candidatetemplateignored:deducedconfl

c++ - 特化 std::make_shared

我有一个具有严格对齐要求(由于使用了AVX操作)的类型,它大于平台默认对齐方式。为了简化此类的使用,我想专门化std::make_shared以始终为该类型使用合适的分配器。像这样:namespacestd{templateinlineautomake_shared(Args&&...args){returnstd::allocate_shared(allocator_type,std::forward(args)...);}}我的问题是,标准允许这样做吗?它会按预期工作吗? 最佳答案 来自N4140[namespace.std]/

c++ - std::map::size_type 对于 std::map 其 value_type 是它自己的 size_type

我有一个std::map,float>这占用了太多内存,为了使用更少的内存,我决定将唯一字符串映射到整数(例如std::map,其中每个新的唯一字符串都映射到map的当前size()),并将这些整数值用作映射的成对键(例如,std::map,float>)。而不是int,我想用std::map::size_type:usingmap_index=std::map::size_type;std::pairkey;当然,这不会编译,因为我需要为map提供参数列表:vector.cc:14:19:error:invaliduseoftemplate-name`std::map'without

c++ - Object var 和 Object* var = new Object() 的区别

如果我有一个名为Object的类,那么创建一个这样的实例有什么区别:Objectvar;和:Object*var=newObject();? 最佳答案 此处您在堆栈上创建了var:Objectvar;所以在上面,var是实际的对象。此处您在堆上创建var(也称为动态分配):Object*var=newObject()在堆上创建对象时,必须在使用完后对其调用delete。此外,var实际上是一个指针,它保存着类型为Object的对象的内存地址。在内存地址存在实际对象。更多信息:Seemyanswerhereonwhatandwhere

解决方案:Python中解决“TypeError: Object of type ‘datetime‘ is not JSON serializable”错误

解决方案:Python中解决“TypeError:Objectoftype‘datetime’isnotJSONserializable”错误在Python编程中,经常会使用JSON(JavaScriptObjectNotation)格式来序列化和反序列化数据。然而,当我们尝试将包含datetime对象的数据转换为JSON字符串时,可能会遇到一个常见的错误:“TypeError:Objectoftype‘datetime’isnotJSONserializable”(类型错误:无法将datetime对象转换为JSON可序列化对象)。这个错误的原因是datetime对象不是JSON可序列化的,因

c++ - 为什么我们不能在没有 new 关键字的情况下在 Qt 中创建对象(即在堆栈上)?

为什么我们不能在没有new关键字的情况下在QT中创建对象?通常我们创建指向对象的指针,如下所示:QLabel*ql=newQLabel();ql->show()但我想创建一个这样的对象:QLabelql=QLabel();ql.show()这可能吗? 最佳答案 问题在于Qt控件(标签、按钮)处于层次结构中(例如,按钮属于窗体)。而Qt的实现方式要求当一个对象被销毁时,属于它的所有对象也会被销毁。如果您将对象放在堆栈上(这就是“不使用new关键字创建”的真正调用方式),它们将自动销毁。这是C++的特性,它适用于所有程序。如果您在堆栈上