据我所知,对于两个向量声明:
//TYPE 1
std::vector<cls> vec; //cls is user defined datatype(A class)
Run Code Online (Sandbox Code Playgroud)
向量的内存在堆栈上分配,向量中的内容的内存在堆上分配.
以下声明也是如此(如果我错了,请纠正我):
//TYPE 2
std::vector<cls*> vec; //cls is user defined datatype(A class)
Run Code Online (Sandbox Code Playgroud)
现在,当Type 1中的向量超出范围时,将为存储在其中的对象释放内存.
但是如果我插入如下的元素(假设我有正确的重载构造函数)然后向量超出范围,那么在类型2中会发生什么:
vec.push_back(new cls(5));
Run Code Online (Sandbox Code Playgroud)
我明确地尝试调用clear但是没有调用析构函数.是否会自动释放内存并调用析构函数.如果不是那么如何实现.
此外,如果我将vector声明为vector,那么为向量分配的内存以及内容:
std::vector<cls*> *vec = new std::vector<cls*>;
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个打印出多维数组内容的函数.我知道列的大小,但不知道行的大小.
编辑:因为我没有说清楚,传递给这个函数的数组不是动态分配的.这些大小在编译时是已知的.
我正在使用3x2阵列进行测试.这是现有的功能:
void printArrays(int array1[][2], int array2[][2]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
cout << "\narray1[" << i << "][" << j << "] = "
<< setfill('0') << setw(2) << array1[i][j]
<< "\tarray2[" << i << "][" << j << "] = "
<< setfill('0') << setw(2) << array2[i][j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这只有在我知道"i"的大小为3(在这种情况下)时才有效.然而,理想情况下,无论第一维的大小如何,我都希望该函数能够工作.
我以为我可以使用sizeof()函数来做到这一点,例如
int size = sizeof(array1);
Run Code Online (Sandbox Code Playgroud)
......从那里做一些数学.
这是奇怪的部分.如果我在数组中使用sizeof()函数,它返回值4.我可以使用指针表示法取消引用数组:
int size = …Run Code Online (Sandbox Code Playgroud) 我知道对使用placement new创建的变量调用delete然后访问该内存块具有未定义的行为.
int* x = new int[2];
char* ch = new(x) char();
*ch = 't';
delete ch;
Run Code Online (Sandbox Code Playgroud)
但是如果在堆栈上分配内存块而不是堆,然后我们在该变量上调用delete然后访问内存,则会得到块类型无效的异常.
int x[2];
char* ch = new(x) char();
*ch = 't';
delete ch;
Run Code Online (Sandbox Code Playgroud)
所以问题清单是:
我有一个带有滚动条的div.现在我希望得到一个事件,每次触发,用户滚动.
这是可能的AngularJS,还是我必须使用jQuery?
编辑: 到目前为止我想出了以下内容:
// JS
.directive('scroll', function() {
return function(scope, element, attrs){
angular.element(element).bind("scroll", function(){
console.log(1);
});
};
});
// HTML
<div class="wrapper" style="height: 1550px" scroll>
[...]
</div>
Run Code Online (Sandbox Code Playgroud)
但这不起作用(我在Firebug-Console中看不到任何日志).
有没有办法用来summarise_each()计算数据框中的记录数,但忽略NAs?
示例/样本数据
df_sample <- structure(list(var_1 = c(NA, NA, NA, NA, 1, NA), var_2 = c(NA,
NA, NA, NA, 2, 1), var_3 = c(NA, NA, NA, NA, 3, 2), var_4 = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), var_5 = c(NA,
NA, NA, NA, 4, 3)), .Names = c("var_1", "var_2", "var_3", "var_4",
"var_5"), row.names = 5:10, class = "data.frame")
> df_samp
var_1 var_2 var_3 var_4 var_5
5 NA NA NA NA NA
6 NA NA NA NA NA …Run Code Online (Sandbox Code Playgroud) 下面是与 3 个变量一起使用的输入装饰器,并为每个变量分配了默认值
@Input() score: number = 0;
@Input() text: string = 'test';
@Input() color: string = 'red';
Run Code Online (Sandbox Code Playgroud)
这就是我将值传递给 ngFor 内的组件的方式。
[text]="item.name"
[score]="item.score"
[color]="item.color"
Run Code Online (Sandbox Code Playgroud)
如果我的 item 对象不包含color 属性,则组件中的颜色变量应采用“红色”作为默认值。
但是当我将其记录为:
ngOnInit() {
console.log(this.score, this.text, this.color);
}
Run Code Online (Sandbox Code Playgroud)
然后颜色变量将undefined作为值。
这是上述日志的控制台
8 "English" undefined
6 "Spanish" "blue"
Run Code Online (Sandbox Code Playgroud)
第一个日志是当项目不包含颜色属性时,第二个是当它包含值为蓝色的属性颜色时
我对析构函数有一些疑问.
class cls
{
char *ch;
public:
cls(const char* _ch)
{
cout<<"\nconstructor called";
ch = new char[strlen(_ch)];
strcpy(ch,_ch);
}
~cls()
{
//will this destructor automatically delete char array ch on heap?
//delete[] ch; including this is throwing heap corruption error
}
void operator delete(void* ptr)
{
cout<<"\noperator delete called";
free(ptr);
}
};
int main()
{
cls* cs = new cls("hello!");
delete(cs);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
另外,由于析构函数会在删除时自动调用,为什么在所有逻辑都可以在析构函数中编写时我们需要显式删除?
我对操作员删除和析构函数非常困惑,无法确定其具体用法.精心描述将非常有用.
编辑: 我基于答案的理解:对于这种特殊情况,默认的析构函数会破坏char指针,所以我们需要先显式删除char数组,否则会导致内存泄漏.如果我错了,请纠正我.
我不明白怎么回事constructors work?
在这里我宣布了一个对象obj2.它调用构造函数abc(),这非常好.
但是当我分配时
obj2 = 100
Run Code Online (Sandbox Code Playgroud)
为什么编译器允许将整数初始化为类对象?如果它完全允许它如何破坏对象,然后它是如何调用另一个参数化构造函数.
现在我有另一个问题,为什么destructor只有一次因为有two对象而被调用?
还有一个疑问,我已经是,编译器是not doing anything与default constructor那为什么默认的构造函数是required?
class abc{
public:
int a, b;
abc()
{a = 0; b = 0;}
abc(int x)
{a = x;}
~abc()
{std::cout << "Destructor Called\n";}
};
int main()
{
abc obj1;
cout << "OBJ1 " << obj1.a << "..." << obj1.b << "\n";
abc obj2;
cout << "OBJ2 " << obj2.a << "..." …Run Code Online (Sandbox Code Playgroud) 我是编程世界的新手,C++已经失去了我.我的程序中有这些行
pennies=(amount-nickels*.05)/.01;
Run Code Online (Sandbox Code Playgroud)
金额是a double,而镍是int.
该程序返回时,正确的价值便士是一个double,但事情是有点过(关1的大部分时间)每当便士是int.
为什么会这样?