草庐IT

logically_deleted_y

全部标签

c++ - 我可以使用 `operator delete[]` 进行单个元素数组分配吗?

如果我们如下分配一个大小为1的对象int*arr=newint[1];我们应该使用operatordelete[]还是operatordelete删除对象?我担心的原因是编译器是否足够聪明将语句转换为单个元素分配int*arr=newint这将导致调用operatordelete[]UB.用户案例:我有一个指针,我最终会以多种方式分配它,但最终还是想删除它。所以想知道,对于单个元素分配,如果我一直使用int*arr=newint[1],我能否始终如一地安全地使用operatordelete[]注意能否请您引用标准来支持您的回答? 最佳答案

c++ - C++ 中 "::delete"的用途是什么?

我目前正在查看使用::delete删除指针的C++代码。一个无意义的例子是:voidDoWork(ExampleClass*ptr){::deleteptr;}这样使用delete关键字的目的是什么? 最佳答案 在某些情况下,operatordelete可能会被重新定义——实际上是重载了——(例如,您的Class可能会定义它并定义operatornew)。通过编码::delete你说你正在使用标准,“预定义”,deletion运营商。在某些Class中重新定义operatornew和operatordelete的典型用例:您想保留一

c++ - 替换 C++ 中的 delete,错误信息

我正在尝试(并且已经解决)一个包含SSE优化成员的类的16字节对齐问题。但让我烦恼的是,我在网上找到的大部分示例都包含一行代码,在我看来完全多余,但在很多地方都重复了。public:void*operatornew(size_tsize)throw(std::bad_alloc){void*p=_aligned_malloc(size,16);if(p==0)throwstd::bad_alloc();returnp;}voidoperatordelete(void*p){Camera*pC=static_cast(p);_aligned_free(p);}有问题的行是Camera*p

c++ - 虚拟成员函数中的 `delete this` 是安全的吗?

我已经知道某些形式的“自杀”是安全的(被认为是合法的),但是,在虚拟成员函数中执行deletethis是否特别安全?请注意,“安全”是指编译器生成的“代码”是否能够处理该构造。注意,我对这样做的利弊不感兴趣,我只是考虑是否安全。附带问题:语言标准是否明确或隐含地要求实现支持任何形式的deletethis习语?我不认为这是Isdeletethisallowed?的拷贝.我的问题是在虚拟成员函数中这样做是否安全。下面是我想做的事情的概述classFooBase{protected:virtualvoidon_idle(){/*no-opbydefault*/}};classFoo:publ

c++ - 错误 C2280 : attempting to reference a deleted function (unique_ptr)

我检查了一些使用原始指针的旧代码,并将它们更改为unique_ptr。现在,当我尝试编译代码时,收到此错误消息:Error1errorC2280:'std::unique_ptr>::unique_ptr(conststd::unique_ptr>&)':attemptingtoreferenceadeletedfunctiond:\visualstudio2013\vc\include\xmemory0关于这种情况的编译器输出很大——为了节省这个问题的空间,请参阅here.据我所知,这与我使用唯一指针的方式有关。它从这里开始(level.h,第65-66行):typedefstd::

c++ - 在 C++ 中使用 delete 命令会导致段错误的原因是什么?

我编写了一个程序,它像这样分配一个类T的新对象:T*obj=newT(tid);其中tid是一个整数在我的代码中的其他地方,我试图释放我分配的对象,它在一个vector中,使用:delete(myVec[i]);然后:myVec[i]=NULL;有时它会顺利通过,而在某些情况下它会导致崩溃——段错误。我在调用delete之前检查过,那个对象就在那里——我之前没有在其他地方删除过它。什么会导致此崩溃?这是我将类型T的对象插入vector的代码:_myVecisglobalintadd(){inttid=_myVec.size();T*newT=newT(tid);if(newT==NUL

C++ new 和 delete 重载

new和delete运算符重载在使用不同的编译器和不同的c++标准进行编译时可能会或可能不会工作。这是正常行为吗?我使用以下代码来测试编译器。#includevoid*operatornew(size_tsize){std::cout以下是我测试代码时从几个编译器得到的结果。mingw-w64官方构建-x86_64-7.1.0-release-posix-seh-rt_v5-rev0.7zc++1112c++141clangx86_64-v4.0.0使用上面的编译器手动构建,没有补丁c++11andc++1412msvc-平台工具集v141和sdkv10.0.15063.0/std:c

c++ - 在没有 delete 运算符的情况下编译 C++

我正在为嵌入式设备编写C++程序,我想在没有libstdc++、异常和动态内存分配的情况下编译它。示例程序:#includeclassA{public:virtual~A(){}virtualvoidFoo()=0;};classB:publicA{public:virtual~B(){}virtualvoidFoo()override{}};intmain(){Bb;return0;}我立即遇到了以下错误。$gccsrc.cpp-static-fno-rtti-fno-exceptions-std=c++11/tmp/ccd0Wydq.o:InfunctionA::~A()':src

c++ - new/delete 和::new/::delete 有什么区别?

newdelete或::new::delete我想知道::的用途,因为如果我删除它们,它似乎可以正常工作。以上就是autopointer教程中写的全部代码。#includesize_t*alloc_counter(){return::newsize_t;}voiddealloc_counter(size_t*ptr){::deleteptr;} 最佳答案 您可以为类覆盖new,但::new将始终在全局范围内查找。即:classA{void*operatornew(std::size_tsz){/*1*/}};void*operato

c++ - 有符号右移 : which compiler use logical shift

我用VisualStudio、Ubuntu的GCC、Intel编译器、MinGW测试了右移。全部移入符号位。我想Xcode的GCC也是如此。我知道该行为是特定于实现的,但看起来所有主要的桌面/服务器编译器都实现了算术移位。有没有符号位不移位的广泛使用的编译器?谢谢。 最佳答案 C在很多不同的架构上运行。我的意思是很多不同的架构。您可以获得在嵌入式DSP和Craysuper计算机上运行的C代码。人们认为理所当然的C标准中的大多数“实现定义”部分实际上只会破坏晦涩的体系结构。例如,有一些DSP和Craysuper计算机,其中CHAR_B