草庐IT

new_value

全部标签

c++ - 使用 new 运算符定义 std::shared_ptr 时出错

我正在尝试通过以下方式使用new运算符定义std::shared_ptr:#includestructA{};intmain(){std::shared_ptrptr=newA();return0;}但我得到了以下编译时错误:main.cpp:Infunction'intmain()':main.cpp:8:30:error:conversionfrom'A*'tonon-scalartype'std::shared_ptr'requestedstd::shared_ptrptr=newA();无论如何,以下绝对有效:std::shared_ptrptr{newA()};有谁知道为什么

c++ - 在#ifndef 中包装#includes - 增加任何值(value)?

我继承了C/C++代码库,在许多.cpp文件中,#include指令被包装在#ifndef中,header内部单个包含#define。例如#ifndef_INC_WINDOWS#include#endif和windows.h看起来像#ifndef_INC_WINDOWS#define_INC_WINDOWS...headerfilestuff....#endif//_INC_WINDOWS我假设这样做是为了加快代码的编译/预处理。我认为这是一个丑陋的过早优化,但由于该项目从清理开始有5分钟的构建时间,我不想让事情变得更糟。那么这种做法是否会增加任何值(value)或加快速度?清理它们可

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper

c++ - 将 _msize 与 new[] 一起使用安全吗?

将Microsoft特定的_msize()函数与新的[]一起使用是否安全?例子:int*i=newint[100];size_ts=_msize(i);coutMSDN确实只描述了malloc&Co的用法。我已经使用VisualStudio2010测试了代码,它看起来可以工作!但我想知道是否有一些预期的问题或任何特殊情况? 最佳答案 如果有人为您的类型覆盖operatornew,则可能会出现问题。写起来一样简单constsize_ts=100;int*i=newint[s];或者,如果你真的写C++std::vectori(100)

c++ - 一起使用 "new"和 "if"语句 - 语法相关

对不起大家。我的意思是在我发布的代码中有一个星号。请重新回答。我正在为同事做代码审查,我看到弹出以下语句:if((someClass*object1=newsomeClass)){//Dowork}这个说法和下面的说法一样吗?someClass*object1=newsomeClass;if(object1){//Dowork}我只是想看看它们是否相等,这样我们就不会遇到任何错误。 最佳答案 您不能在第一种形式的if条件内创建对象,除非类型立即出现在括号内,因此:if(someClass*object1=newSomeclass(.

c++ - new 不分配内存

这应该每秒用大约100MB填满我的内存。我使用gnome-systemmonitor和htop跟踪内存使用情况。但不知何故它没有。为什么?#include"unistd.h"#includeintmain(intargc,char*argv[]){while(true){std::cout运行:g++-std=c++11-O0main.cpp;./a.out 最佳答案 因为您没有使用它,所以Linux会进行惰性分配,因此在您使用它之前它不会实际映射任何内存页。如果你输入一些代码:char*test=newchar[100000000

c++ - 警告 : second/third operand of conditional has no effect [-Wunused-value]

std::cout我想检查给定值是否可以创建三角形。我收到警告:secondoperandofconditionalexpressionhasnoeffect[-Wunused-value]thirdoperandofconditionalexpressionhasnoeffect[-Wunused-value]怎么了? 最佳答案 您的代码转换为:((std::cout首先,operator有更高的operatorprecedence比operator&&.只有abs(b-c)的值将被打印并且(a部分将与std::ostream::

c++ - 为什么 std::map 没有 insert(key &, value & v) 类型的插入函数

为什么std::map不支持如下插入:std::mapmap_int;voidinsert_map(obj1&key,obj2&val){map_int.insert(key,val);}我知道以上是不正确的。我想知道是什么阻止了这样设计插入功能。它比创建一对IMO更直观。 最佳答案 它叫做emplace():std::mapm;//usespair'stemplateconstructorm.emplace("d","ddd"); 关于c++-为什么std::map没有insert(k

c++ - 使用 new 并能够检查指针是否为 0(空)

有人告诉我这样做,int*i=newint();我将无法检查我的指针是否为0。new发送异常以防失败。但是,如果我出于某种原因不想使用异常怎么办。有什么方法可以检查我的指针是否正确分配? 最佳答案 阅读文档:http://www.cplusplus.com/reference/new/operator%20new/(2)nothrowallocationSameasabove(1),exceptthatonfailureitreturnsanullpointerinsteadofthrowinganexception.以及示例:st

c++ - 我应该在我的 C++ WIn32 应用程序中重写 operators new/delete

我知道Microsoft自己曾经建议通过调用HeapCreate()和HeapAlloc()来覆盖operatornew,但那是不久前的事了。有关详细信息,请参阅KB139638。在Win32上重写new/delete是否仍然有益?推荐的实现方式是什么?TIA。 最佳答案 这篇文章说你可以做,而不是说你应该。其中的代码写得很糟糕,一点也不有趣,而且它不是线程安全的。通常,提供的new和delete实现可以很好地满足所有一般编程需求。只有当您确定了重新实现可以解决的特定问题时,您才应该考虑重新实现它们。