[英]no default constructor exists for class x, operator new inheritence
我正在嘗試實施CUDA博客上給出的統一虛擬內存示例: http ://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/
Visual Studio 2013給我一個錯誤:類“ Term”不存在默認構造函數
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>
#define NUM_ATTRIBUTES 10
class Managed {
public:
void *operator new(size_t len) {
void *ptr;
cudaMallocManaged(&ptr, len);
std::cout << "custom new for size " << len << '\n';
return ptr;
}
void *operator new[] (size_t len) {
void *ptr;
cudaMallocManaged(&ptr, len);
std::cout << "custom new for size " << len << '\n';
return ptr;
}
void operator delete(void *ptr) {
cudaFree(ptr);
}
};
class Attribute : public Managed {
public:
int num_levels;
int num_active_levels;
int active_levels;
};
class Term : public Managed {
public:
int num_active_attributes;
int active_attributes;
Attribute attribute[NUM_ATTRIBUTES];
// Unified memory copy constructor allows pass-by-value
Term (const Term &orig) {
num_active_attributes = orig.num_active_attributes;
active_attributes = orig.active_attributes;
cudaMallocManaged((void **)&attribute,NUM_ATTRIBUTES * sizeof(Attribute));
memcpy(attribute, orig.attribute, NUM_ATTRIBUTES * sizeof(Attribute));
}
};
int main()
{
Term * A = new Term[10];
getchar();
return 0;
}
Term類不是從父類Managed中定義的新運算符繼承嗎?
這與CUDA無關。 編譯器不會生成默認構造函數,因為您已經提供了另一個構造函數(副本1)。
只是顯式地請求默認構造函數:
class Term : public Managed {
public:
...
// C++11
Term() = default;
// Pre C++11 alternative (although not strictly equivalent)
Term() {}
...
};
還要注意, operator new
和構造函數是兩個不同的東西: new
用於分配存儲,構造函數用於將存儲初始化為有意義的狀態(大致)。
您需要定義數組元素所需的默認構造函數
class Term : public Managed {
public:
//...
Term () {} // default c-tor
Term() = default; // since C++11, note however that there are some
// differences between Term() = default; and Term() {}
// they are not equal when value initialization
// is considered
};
您沒有一個,因為顯式定義的copy-ctor Term( const Term&)
禁止編譯器生成默認構造函數。 關於默認構造函數方面=default
和{}
之間的區別,您可以看一下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.