相关疑难解决方法(0)

在C函数中创建的对象的存在

已经建立(见下文)new创建对象需要放置

int* p = (int*)malloc(sizeof(int));
*p = 42;  // illegal, there isn't an int
Run Code Online (Sandbox Code Playgroud)

然而,这是在C中创建对象的一种非常标准的方式.

问题是,int如果是在C中创建并返回到C++ ,是否存在?

换句话说,以下是否保证合法?假设intC和C++是相同的.

foo.h中

#ifdef __cplusplus
extern "C" {
#endif

int* foo(void);

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

foo.c的

#include "foo.h"
#include <stdlib.h>

int* foo(void) {
    return malloc(sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "foo.h"
#include<cstdlib>

int main() {
    int* p = foo();
    *p = 42;
    std::free(p);
}
Run Code Online (Sandbox Code Playgroud)

有关安置强制性质的讨论的链接new:

c c++ object-lifetime language-lawyer

18
推荐指数
1
解决办法
510
查看次数

什么是":: operator new"和":: operator delete"?

我知道new并且delete是关键词.

int obj = new int;
delete obj;

int* arr = new int[1024];
delete[] arr;
Run Code Online (Sandbox Code Playgroud)

<new>header是C++标准头文件的一部分.它有两个运算符(我不确定它们是运算符还是函数):

::operator new

::operator delete

这些运算符使用如下:

#include <new>
using namespace std;

int* buff = (int*)::operator new(1024 * sizeof(int));
::operator delete(buff);
Run Code Online (Sandbox Code Playgroud)

什么是":: operator new"和":: operator delete"?它们newdelete关键字不同吗?

c++ new-operator delete-operator operator-keyword

1
推荐指数
3
解决办法
2610
查看次数