删除此处分配的所有内存的正确方法是什么?
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete (char*)buf;
Run Code Online (Sandbox Code Playgroud)
要么
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete buf;
Run Code Online (Sandbox Code Playgroud)
还是他们都一样?
我遇到了以下代码,
class Handler
{
public:
Handler() {}
~Handler() {}
enum HANDLER_PRIORITY {PRIORITY_0, PRIORITY_1, PRIORITY_2};
virtual HANDLER_PRIORITY GetPriority();
private:
HANDLER_PRIORITY m_priority;
}
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中我有这个
HANDLER_PRIORITY Handler::GetPrioity()
{
return PRIORITY_0;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译错误,"缺少类型说明符 - 假设int.注意:C++不支持default-int"
我知道unlinke C,C++不支持default-int return.但为什么它不会识别枚举返回类型.如果我使用int/void替换HANDLER_PRIORITY中的返回类型,或者如果我在类本身中定义方法,则它可以正常工作.(内联)或将返回类型更改为Handler :: HANDLER_PRIORITY.
我在VS 2008.
有人能告诉我两种情况下编译器的不同之处吗?
#include <cstdio>
using namespace std;
template <typename TReturn, typename T>
TReturn convert(T x)
{
return x;
}
int main()
{
printf("Convert : %d %c\n", convert<int, double>(19.23), convert<char, double>(100));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
int convert(double x)
{
return 100;
}
char convert(double x)
{
return 'x';
}
int main()
{
printf("Convert : %d %c\n", convert(19.23), convert(100)); // this doesn't compile
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一种情况是否没有函数重载?