我想我在某个地方读过这样的文章:当使用指针时,我们想要将其中一个的内容复制到另一个,有两个选项:
使用memcpy或
只是给他们分配=?
然而,在下面的例子中,我只是通过为两个指针分配内存,然后分配第二个指针,更改first..but,然后我的第二个指针的条目也发生了变化来测试它。我做错了什么?
typedef struct {
int a;
int b;
int c;
} my_struct;
int main(int argc, char** argv) {
my_struct* first = malloc(sizeof(my_st
我是C的新手,我想问一个关于复制行为的问题。我正在读Scott Meyers的C++,他在书中说,C++可以被认为是语言的组合,我们应该把所谓的C部分和C++部分区分开来。现在,如果我们必须使用包含以下内容的本地C API:
FontHandle getFont(); //From, C API
void releaseFont(FontHandle fh); //From the same C API
据我所知,C语言不允许通过复制构造函数定义自定义复制行为。因此,如果我写以下内容,我应该期望发生什么:
FontHandle f1 = getFont();
FontHandle f2 =
我的问题是默认的副本库。把我的指点搞砸了。
简化版:
我有一个A类,它具有默认的复制区。
A有两个成员对象:B和C。
B有一个指向C的指针。
形势:
我将A存储在std::vector:vector.emplace_back(A(...));中
emplace_back这样做:
- **Creating** A (setting up **B's pointer to C**, etc)
- **Copying** A into the vector. (**default** copy ctr: copies by **value**)
- **D
我想为c++中的一个成员变量分配一个特定的结构,但是我的尝试失败了。经过一些测试后,我认识到,在赋值之后,变量不保存传递的对象,而是隐式调用复制构造函数,只将值复制到新对象。难道在c++中不可能覆盖对象变量吗?
现在详细情况如下:
我在c++方面没有多少经验,但由于试图为现有的小型c++库手工制作jni包装器,我不得不编写一些c++代码。我是通过java端的代理类来实现的,它只保存c++对应方的附件并重定向方法调用。这个库由许多结构组成,我为其编写了java类。成员的分配和访问是通过java端的getter和setter实现的。
//C-lib code
struct A {
int
我有以下的类定义:
class A {...}
class B : public class A {...}
以及所有者类定义:
class C {
A* a;
public:
C (A* a) { this->a = a; }
}
然后,当我试图调用以下内容时,一切都很好:
B* b = new B();
C(b);
但是,我有以下所有者类定义:
class C {
std::unique_ptr<A> a;
public:
C(std::unique_ptr<A>& a) { this->a = std::mo
我是C++新手,对某事感到困惑
我要定义一个类,什么时候应该定义一个成员指针呢?或者我应该在什么时候定义一个成员的值?或者什么时候我应该把它定义为引用?
class C
{
int a;
public:
C(int i):a(i){};
};
class C2
{
C a;
C *p;
public:
C2(int i):a(i), p(new C(i)){};
~C2(){delete p;}
C ChangeValue(C c)
{
C temp = a;
a = c;
r
我有一个需要调用C#库的本机C++应用程序。在研究了不同的选项之后,我选择添加一个C++/CLI库作为包装器来处理两者之间的直接接口。我有一个从C++传递给C#的非常大的数组(如此之大,以至于通过Marshal::Copy进行复制是不可能的)。我一直无法解决语法问题。
C#函数声明:
void Computation::passInVolume(int size, short volume[])
C++/CLI函数:
void Wrapper::passInVolume(int size, short volume[])
{
//this call succeeds, but does
我从C++开始,我对指针和它的拷贝有一些疑问。
我要写一个例子:
class Abc{
Qwe q;
}
Abc* a = new Abc();
Abc* b = new Abc();
b->q = a->q; //??
这项任务中发生了什么?'a‘会把'q’的副本给'b‘吗?
问题是我希望两个指针都有不同的'q‘,但我不知道如何复制它。如示例中所示?
谢谢
C编译器如何将struct/union传递给/从函数返回?在函数调用之前,结构是否被推送到堆栈?传递给函数的是结构的引用吗?
同样的问题也适用于返回。函数到底返回什么?
typedef struct {
long m4;
long m3;
long m2;
long m1;
} ext_components_t;
typedef union {
long array[sizeof(int_components_t)];
int_components_t comp;
} int_components_u;
typedef union {
我正在创建游戏的生命在C和我得到这个分割错误(核心转储)错误后,程序从用户的输入。我最近开始学习C,我对指针的理解是基本的,.I在在线查看并尝试不同的方法使它正确之后,一直未能找到它的修复方法。如果我不使用指针,保持简单,一切正常工作,我将感谢任何帮助。
int main() {
int maxR;
int maxC;
int generations;
int i=0;
int j=0;
int k=0;
int n; /
我有两个指针,每个指针指向不同的数组。其中一个指针位于结构内部,如下所示:
typedef struct
{
int N; /* Number of Elements in array */
double *c; /* Pointer to an array */
/* Other members.... */
} CS;
该结构由以下方法初始化:
CS->N = n; /* n is an integer of an initially unknown size */
CS->c = (double *)malloc(
当我编译包含可选类型的二叉树时:
#include <optional>
class BinaryTree
{
public:
BinaryTree();
int value;
std::optional<BinaryTree> left,right;
};
int main()
{
return 0;
}
通过
g++ -std=c++17 -Wfatal-errors main.cpp
我面对这个错误
In file included from /usr/include/c++/7/bits/move.h:54:0,
我真的在为使用析构函数和复制构造函数的概念而苦苦挣扎。如果我不使用析构函数,代码就能正常工作,因为它是自动执行的。如果我这样做了,我会收到一个错误,说“Debug Assertion Failed!”和'Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse).
但我希望能够理解如何使用析构函数。这是下面的代码,我非常感谢大家帮助我解释我做错了什么或需要做什么!
class Matrix {
private:
int M;
int N;
double *data;
public:
Matrix();