草庐IT

rb_str_new

全部标签

c++ - 初始化 shared_ptr 成员变量,new vs make_shared?

当初始化一个shared_ptr成员变量时://.hclassCustomer{public:Customer();private:std::shared_ptrsomething_;}//.cppCustomer():something_(newOtherClass()){}对比Customer():something_(std::make_shared()){}是否允许使用make_shared版本?我似乎总是看到第一个版本,哪个是首选? 最佳答案 不允许make_shared的唯一时间是:如果您得到一个由其他人分配的裸指针并将

c++ - 我如何在共享内存中使用运算符 `new` 和 `delete`?

我想使用共享内存在多​​个程序之间共享一些对象。我在thissite找到了示例.它没有任何对象分配,只是直接寻址,但我想在共享内存中创建结构或类。 最佳答案 因为内存已经分配好,你想使用placementnew:void*ptr=shmat(shmid,0,0);//HandleerrorsMyClass*x=new(ptr)MyClass;然后,MyClass的新实例将在ptr指向的内存中构造。当不需要该对象时,您必须手动调用析构函数(不释放内存)。ptr->MyClass::~MyClass();

c++ - 链接器错误 - 带有 libboost_thread 的 macOS 上 undefined symbol std::string::c_str() const?

我从homebrew安装了boost1.55.0在macos小牛队上。获取链接器异常-找不到std::string::c_str(),我不明白为什么。这可能是Homebrew软件的问题吗?我尝试直接从boost编译boost1.55.0,它甚至没有在macOS上构建。这段代码:#include#include#include#includetypedefstd::unordered_mapStringMap;staticboost::thread_specific_ptr>rlist;intmain(){return0;}使用此命令行编译:g++-std=c++11main.cpp-I

c++ - C++ placement new 如何工作?

这个问题是为了确认我对概念的理解是否正确,并就使用方式和可能的优化征求专家意见。我试图理解“placementnew”,下面是我想出的程序...#include#includeclassA{int*_a;public:A(intv){std::cout~A();std::couttestFunction();A*obj2=new(obj1)A(22);obj1->testFunction();obj2->testFunction();delete(obj1);//Isitreallyneedednow?Hereitwilldeletebothobjects..sothisisnotth

c++ - 是否可以创建一个通用方法或类来创建任何类的 "new"实例?

通常,如果我有一个Foo或一个Bar,我会做类似的事情:Foo*foo=newFoo();Bar*bar=newBar(2,3,5);有没有一种方法可以使用模板或宏来构造一个函数,这样我就可以做类似的事情:Foo*foo=MyAwesomeFunc(Foo);Bar*bar=MyAwesomeFunc(Bar,2,3,5);TheactualmethodsignatureofMyAwesomeFuncisnotimportanttome.Foo和Bar不需要以任何可能的方式关联,并且可以具有完全不同的构造函数。此外,我可能希望在未来支持任意数量的类,而不必实际修改MyAwesomeFu

c++ - 当字符串超出范围时,将 string::c_str() 分配给 const char*

我对基本的C++用法有疑问。下面的代码使用gcc/LInux编译,打印正确。字符串test超出范围,所以它的c_str()值也应该无效,不是吗?我错了还是我误解了constchar*的意思?#includeintmain(){constchar*a="aaaa";std::cout 最佳答案 你是对的,你的代码无效,因为它使用了一个生命周期已经结束的对象。它是“偶然”起作用的,你不能依赖它。 关于c++-当字符串超出范围时,将string::c_str()分配给constchar*,我们

c++ - 为什么要使用 new 和 delete?

我是C++的新手,我想知道为什么我还要费心使用new和delete?它可能会导致问题(内存泄漏),我不明白为什么我不应该在没有new运算符的情况下只初始化一个变量。有人可以向我解释吗?很难用谷歌搜索这个具体问题。 最佳答案 出于历史和效率原因,C++(和C)memorymanagement是明确的和手动的。有时,您可能会在callstack上分配(例如,通过使用VLAs或alloca(3))。然而,这并不总是可能的,因为堆栈大小有限(取决于平台,几千字节或几兆字节)。内存需求并不总是FIFO或LIFO.确实发生了您需要分配内存的情况

C++ new 和 delete 以及字符串和函数

好的previous问题回答的很清楚,但是我发现了另一个问题。如果我这样做会怎样:char*test(intran){char*ret=newchar[ran];//process...returnret;}然后运行它:for(inti=0;i那么在将char*转为string之后,我就不用再为删除而烦恼了?编辑:正如回答的那样,我必须delete[]每个new[]调用,但在我的情况下这是不可能的,因为指针丢失了,所以问题是:如何正确地将char转换为string? 最佳答案 这里您不是转换char*为[std::]string,而

c++ - stringstream clear 和 str 有什么区别

我只是想知道clear()和str("")之间有什么区别;例如:stringstreamss("StackOverflow");ss.clear();ss.str("");我想知道潜在的技术差异。 最佳答案 clear()清除stringstream中的错误状态标志。也就是说它将错误状态设置为goodbit(等于零)。str("")将关联的字符串对象设置为空字符串。他们实际上做着完全不同的事情。名字的特殊选择只会让它听起来好像他们执行类似的任务。 关于c++-stringstreamcl

c++ - new 和 new[1] 有什么区别?

new和new[1]有什么区别?我可以将delete与new[1]一起使用吗?编辑好吧好吧,我应该提供背景,抱歉。我正在使用VS2010评估BoundsChecker,当我在new[1]上使用delete[]时,它提示内存泄漏。所以理论上我知道应该如何使用new和delete对,但这种特殊情况让我对幕后的事情感到困惑。知道发生了什么事吗? 最佳答案 Ed和aix是对的,但幕后还有很多事情要做。如果您使用new,然后delete,则delete调用将执行一个析构函数。如果使用new[],就必须使用delete[],但是delete[]